參考Docker 環境搭建docker
1.查看鏡像:docker imagesshell
2.從registry下載鏡像(默認的源是Docker Hub):docker pull [USERNAME/]IMAGE[:tag]ubuntu
3.查看某個鏡像構建的層次:docker history IMAGEvim
4.爲鏡像命名:docker tag [old_repositry]:[old_tag] [new_repositry]:[new_tag]網絡
5.上傳鏡像到Docker Hub上: docker push [USERNAME]/repositry:tag測試
注:上傳前要登錄:docer login -u USERNAMEui
6.刪除Docker host中的鏡像:.net
1.刪除一個鏡像:docker rmi IMAGErest
2.刪除所有鏡像:docker rmi $(docker images -q)code
1.若某些鏡像對應的容器處於run狀態或者處於stop狀態,則不能刪除鏡像。
解決辦法:刪除鏡像對應的容器:rm
2.若兩個鏡像的IMAGE ID同樣,這不能刪除所有鏡像。
解決辦法:逐個刪除鏡像。
7.搜索Docker Hub中的鏡像: docker search IMAGE
Dockerfile是鏡像的描述文件。構建Dockerfile的一些指令:
1.FROM IMAGE:表示以IMAGE爲基礎,從而構建構建更高層次的鏡像。
例:FROM scratch:不以任何鏡像爲基礎。
注:通常以base鏡像爲基礎:Ubuntu,Debian,CentOS
2.ADD: 從build context複製文件到鏡像。若文件時壓縮包,則自動解壓。
3.COPY:將build context中複製文件到鏡像。
1.COPY src dest
2.COPY ["src", "dest"]
注:src只能是build context中的文件或目錄。
4.ENV:設置環境變量
例如:ENV MY_VERSION 1.3
RUN apt install -y mypackage=$MY_VERSION (MY_VERSION被替換成1.3)
5.EXPOSE:指定暴露的端口。
6.WORKDIR:指定容器當前的工做目錄。
7.RUN:運行特定的指令。
8.CMD:容器啓動時運行的指令,多個指令只有最後一個生效。CMD能被RUN參數替換。
9.ENTRYPOINT:跟CMD同樣,不同的時CMD 和 docker run後的參數會傳給ENTRYPOINT。不會被RUN後參數替換。
注:DOCERFILE有兩種模式:Shell和Exec模式。
1.shell模式:<instruction> <command>
2.exec模式:<instruction> ["executable", "param1", "param2", ...]
10.MAINTAINER:鏡像的做者。
1.docker commit 命令
構建步驟:
1.運行容器
例如:docker run -it --name=ubuntu_test ubuntu
2.修改容器
例如:apt install -y vim
3.保存爲新的鏡像
例如:docker commit ubuntu_test ubuntu-vim
2.dockerfile 構建文件
docker built -t IMAGE_NAME .
注:-t表示打一個tag標籤。
1.啓動容器:
1.docker run [OPTIONS] IMAGE [COMMAND]:建立並運行容器。
例如:docker run -d -p 80:80 httpd
-d:之後臺方式運行
-p:指定端口
2.docker create IMAGE: 只建立容器,不運行。
2.查看正在運行的容器:
1.docker ps
2.docker container ls
3.指定容器名字:--name "CONTAINER_NAME"
4.進入容器的方法:
1.docker attach CONTAINER_NAME:進入容器,不能建立新進程
2.docker exec CONTAINER_NAME op:進入容器,能夠建立新進程。
5.查看容器的輸出:docker log -f CONTAINER
6.中止正在運行的容器:
1. docker stop/kill CONTAINER:佔用CPU
2. docker pause CONTAINER: 不佔用CPU
7.運行處於中止狀態的容器:
1. docker start CONTAINER
2. docker unpause CONTAINER
8.重啓容器:
1.restart = stop + start
2.--restart=always:不管容器何種緣由退出,當即重啓容器。
3.--restart=on-failure:3,若啓動的進程退出並返回非0值,最多重啓3次
9.重啓容器:
docker rm CONTAINER
參考容器操做圖
1.內存限制:
1. -m 或 --memory: 隨着以內存的使用限額。
例如: -m 300M
2.--memory-swap: 內存+swap的使用限額。
例如:-memory-swap 400M
2.CPU限制:-c 或 --cpu-shares
例如:docker run --name "NAME1" -c 1024 IMAGE
docker run --name "NAME2" -c 512 IMAGE:表示1號容器使用CPU時間是2號容器的2倍。
注:--cpu 1:表示有1顆CPU
3.限制磁盤讀寫速度:--blkio-weight
例如:docker run -it --name CONTAINER_A --blkio-weight 600 IMAGE
docker run -it --name CONTAINER_B --blkio-weight 300 IMAGE
注:
--device-read-bps
,限制讀某個設備的 bps。 --device-write-bps
,限制寫某個設備的 bps。 --device-read-iops
,限制讀某個設備的 iops。 --device-write-iops
,限制寫某個設備的 iops。
例如:docker run -it --device-write-bps /dev/sda:30MB IMAGE:限制對設備的寫速度不超過30MB
--network=none : 表示除了lo網卡(ip=172.0.0.1,用於迴環測試),沒有其餘任何網卡。通常用在高機密的應用中。
例如:docker run -it --network=none ubuntu /bin/sh
--network=host:表示與主機host分享ip。
不指定network表示建立一個新的網絡接口,掛到docker0上。圖
1.查看網橋名以及接口:brctl show
2.查看網橋的詳細信息(包括ip):docker network inspect BRIDGE
1.建立一個自定義的網絡驅動:docker network create --driver bridge my_net
2.指定自定義網橋的ip網段(sub-net)以及網關(gateway):--subnet和--gateway
3.使用自定義的網橋:--network=MY_NET
4.使用自定義網橋時指定靜態ip:--ip。注意:只有指定--sub_net才能指定靜態ip。
兩個容器若要通訊,必需要有屬於同一網絡的網卡。
1.在一個容器中建立一個網卡,掛在MY_NET上:docker network connect MY_NET CONTAINER圖
2.docker的自定義網絡自帶DNS Sever服務,所以能夠將ip換成容器名進行通訊:
docker run -it --network=MY_NET --name=CONTAINER IMAGE
注:bridge網絡沒有DNS Server功能。
3.使用joined容器方法讓兩個容器共享網卡信息和配置信息:
docker run -it --network=container:CONTAINER IMAGE,這樣新產生的容器能夠共享CONTAINER的網絡信息。
好處:可使用lo的ip地址讓兩個容器通訊。