docker使用學習筆記
- 2019 年 11 月 2 日
- 筆記
版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/luo4105/article/details/102837587
docker介紹
docker是個容器,採用沙盒啟動,類似虛擬機。
docker的架構是C/S,遠程倉庫存放image(鏡像),本地下載image(鏡像),並根據image(鏡像)本機創建container(容器),一個容器就是一個運行的系統。

docker可以執行--help
來查看命令API
docker start --help

docker下載後需要啟動守護進程,它會跑著本機後台,啟動方式 – 啟動docker.app
open /Applications/Docker.app
macos通過命令行啟動docker後台服務
通過 launchctl 查看 docker server, 記住docker server 名
launchctl list | grep docker 111117 0 com.docker.docker.2388
然後關閉和啟動它。
launchctl stop com.docker.docker.2388 && launchctl start com.docker.docker.2388
容器(container)
docker創建容器並啟動命令
docker run ubuntu:15.10 /bin/echo "Hello world"
docker會在本地找到ubuntu:15.10鏡像並啟動容器,容器使用bin/echo
列印"Hello world"。
查看所有容器
docker ps -a
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b10c13741118 ubuntu:15.10 "/bin/bash" 56 minutes ago Exited (100) 54 minutes ago hardcore_dewdney cc36ecdbfdd1 ubuntu:15.10 "/bin/sh -c 'while t…" About an hour ago Exited (137) About an hour ago practical_herschel

會列出所有容器,啟動或者非啟動的。COMMAND是啟動命令,可以通過CONTAINER ID
和NAMES
來啟動、關閉、刪除指定容器,ports是埠綁定,如0.0.0.0:80->80/tcp
就是本地容器80埠綁定到本地80埠。
docker start 73d44474e7a0 73d44474e7a0 docker stop 73d44474e7a0 73d44474e7a0 docker rm 73d44474e7a0 73d44474e7a0
rm只能刪除未啟動的容器
查看容器日誌
docker logs 73d44474e7a0 docker logs -f 73d44474e7a0
-f
是實時監控列印。
進入容器
進入容器實際是進入容器並使用/bin/bash
終端應用,使用exec命令

docker exec -it 73d44474e7a0 /bin/bash
也可以在容器中安裝ssh工具進行連接。
鏡像(image)
鏡像就是一個作業系統的模版,根據鏡像docker生成一個又一個容器。鏡像放在docker遠程倉庫中,與mvn,git類似。
查看本地鏡像
docker images

repository是鏡像名,通過repository生成容器;image_id是鏡像id,可以通過image_id刪除鏡像。
刪除鏡像
docker image rm dcba8021e01d6549a1ae8feabc5e1eca5cf746c1
生成容器
docker run -i -t ubuntu
docker run -i -t ubuntu:15.10
如果不指定版本,它會下載最新版本鏡像並生成容器啟動。-t
是Allocate a pseudo-TTY,一個遠程連接的終端。
生成鏡像
對於修改的容器,可以生產自定義鏡像
docker commit 0e143e309026ed84d489f87757d20f625aafb4c5226ec5bed5902f53db5e2bc5 ubuntu/luocheng

查看更多命令
docker image --help

搜索網上鏡像
docker search python

下載鏡像
docker pull python
dockerFile
dockerFile是一個構建docker鏡像的命令行文件,裡面的指令告訴docker如何去下載並配置鏡像。
FROM nginx:1.15.12 COPY ./nginx.conf/total.conf /etc/nginx/conf.d/default.conf COPY ./run.sh /app/run.sh EXPOSE 80 CMD ["/app/run.sh"]
FROM
是鏡像來源,copy是要執行的操作,EXPOSE是暴露埠,cmd是要執行的命令。
docker build luocheng/ngnix .
luocheng/ngnix
是鏡像名,.
是鏡像文件所在的目錄。
docker-compose
docker-compose
是一個支援批量啟動容器的自動化工具。需要定義一個.yml
文件,裡面寫好將要執行的命令,一般是通過dockerfile構建鏡像和容器,並啟動它們,docker-compose
執行這個.yml
文件,將文件中的鏡像和容器都構建號並打開。
services: redis: image: redis:4.0 volumes: - redis-data:/data ports: - "6379:6379" mariadb: image: mariadb:10.0 environment: - MYSQL_ROOT_PASSWORD=luocheng123 - MYSQL_USER=luocheng - MYSQL_PASSWORD=luocheng123 - MYSQL_DATABASE=luocheng - TZ=Asia/Shanghai volumes: - ./mysql/conf.d:/etc/mysql/conf.d - ./mysql/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d - mysql-data:/var/lib/mysql ports: - "3306:3306" volumes: redis-data: {}
docker-compose
還有一些自定義命令。
查看列印日誌
docker compose logs helloworld
啟動項目
docker compose start helloworld
更新並啟動項目
docker-compose up helloworld
docker特效和原理
docker運行於作業系統,但與作業系統共用磁碟,記憶體,這使得這種虛擬化技術可以讓一台伺服器上部署很多個docker容器,而不像虛擬機記憶體和磁碟與作業系統完全分開,不能共用。
docker雖然共用記憶體,磁碟,但是容器之間不能直接通訊,訪問,是完成獨立的;在容器內使用ps命令,只能看到該容器的進程,無法看到其他容器的進程,說明它們的進程也是獨立分開的;網路也是分開的;還能歸約docker對硬體的使用,如設置幾個cpu,設置最大多少記憶體。
隔離用的技術是linux的命名空間,這個命名空間和多用戶登陸類似。硬體資源的控制和管理使用linux系統的CGroups功能。docker的核心虛擬化功能都是使用linux自帶的功能。就好像coding的核心功能也是git文件版本管理,它做的是git外業務,展示等。