docker網址php
docker介紹html
docker安裝java
docker使用linux
docker的使用命令nginx
使用命令git
rungithub
詳細參數配置web
docker詳細使用docker
docker基本信息shell
docker hub:https://hub.docker.com/
經常使用官網docs:https://docs.docker.com/
虛擬化使得許多操做系統可同時在單個系統上運行。
容器則可共享同一個操做系統內核,將應用進程與系統其餘部分隔離開。
普通虛擬化技術和Docker的對比圖
傳統的 Linux 容器使用 init 系統來管理多種進程。這意味着,全部應用程序都做爲一個總體運行。與此相反,Docker 技術鼓勵應用程序各自獨立運行其進程,並提供相應工具以實現這一功能。這種精細化運做模式自有其優點。
如下是centos版本
官網安裝指導:https://docs.docker.com/install/linux/docker-ce/centos/
# 如下親測有效,20190308版。
sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo sudo yum install docker-ce docker-ce-cli containerd.io
systemctl start docker
[root@localhost ~]# docker version
Client:
Version: 18.09.3
API version: 1.39
Go version: go1.10.8
Git commit: 774a1f4
Built: Thu Feb 28 06:33:21 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 18.09.3
API version: 1.39 (minimum version 1.12)
Go version: go1.10.8
Git commit: 774a1f4
Built: Thu Feb 28 06:02:24 2019
OS/Arch: linux/amd64
Experimental: false
增長開機啓動
chkconfig docker on
實測有效。
添加鏡像加速器
阿里鏡像加速器網址:https://cr.console.aliyun.com/cn-hangzhou/mirrors 可加快連接docker官網鏡像的速度 教程: 1. 安裝/升級Docker客戶端 推薦安裝1.10.0以上版本的Docker客戶端,參考文檔 docker-ce 2. 配置鏡像加速器 針對Docker客戶端版本大於 1.10.0 的用戶 您能夠經過修改daemon配置文件/etc/docker/daemon.json來使用加速器 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
實測有效。
補充:
刪除none的image docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker stop docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker rm docker images|grep none|awk '{print $3 }'|xargs docker rmi
docker --help 管理命令: container 管理容器 image 管理鏡像 network 管理網絡 命令: attach 介入到一個正在運行的容器 build 根據 Dockerfile 構建一個鏡像 commit 根據容器的更改建立一個新的鏡像 cp 在本地文件系統與容器中複製 文件/文件夾
# 從主機複製到容器sudo docker cp host_path containerID:container_path
# 從容器複製到主機sudo docker cp containerID:container_path host_path
create 建立一個新容器 exec 在容器中執行一條命令 images 列出鏡像 kill 殺死一個或多個正在運行的容器 logs 取得容器的日誌 pause 暫停一個或多個容器的全部進程 ps 列出全部容器 pull 拉取一個鏡像或倉庫到 registry push 推送一個鏡像或倉庫到 registry rename 重命名一個容器 restart 從新啓動一個或多個容器 rm 刪除一個或多個容器 rmi 刪除一個或多個鏡像 run 在一個新的容器中執行一條命令 search 在 Docker Hub 中搜索鏡像 start 啓動一個或多個已經中止運行的容器 stats 顯示一個容器的實時資源佔用 stop 中止一個或多個正在運行的容器 tag 爲鏡像建立一個新的標籤 top 顯示一個容器內的全部進程 unpause 恢復一個或多個容器內全部被暫停的進程
docker run [OPTIONS] IMAGE [COMMAND] [ARG...] -d, --detach=false 指定容器運行於前臺仍是後臺,默認爲false -i, --interactive=false 打開STDIN,用於控制檯交互 -t, --tty=false 分配tty設備,該能夠支持終端登陸,默認爲false -u, --user="" 指定容器的用戶 -a, --attach=[] 登陸容器(必須是以docker run -d啓動的容器) -w, --workdir="" 指定容器的工做目錄 -c, --cpu-shares=0 設置容器CPU權重,在CPU共享場景使用 -e, --env=[] 指定環境變量,容器中可使用該環境變量 -m, --memory="" 指定容器的內存上限 -P, --publish-all=false 指定容器暴露的端口 -p, --publish=[] 指定容器暴露的端口 -h, --hostname="" 指定容器的主機名 -v, --volume=[] 給容器掛載存儲卷,掛載到容器的某個目錄 --volumes-from=[] 給容器掛載其餘容器上的卷,掛載到容器的某個目錄 --cap-add=[] 添加權限,權限清單詳見:http://linux.die.net/man/7/capabilities --cap-drop=[] 刪除權限,權限清單詳見:http://linux.die.net/man/7/capabilities --cidfile="" 運行容器後,在指定文件中寫入容器PID值,一種典型的監控系統用法 --cpuset="" 設置容器可使用哪些CPU,此參數能夠用來容器獨佔CPU --device=[] 添加主機設備給容器,至關於設備直通 --dns=[] 指定容器的dns服務器 --dns-search=[] 指定容器的dns搜索域名,寫入到容器的/etc/resolv.conf文件 --entrypoint="" 覆蓋image的入口點 --env-file=[] 指定環境變量文件,文件格式爲每行一個環境變量 --expose=[] 指定容器暴露的端口,即修改鏡像的暴露端口 --link=[] 指定容器間的關聯,使用其餘容器的IP、env等信息 --lxc-conf=[] 指定容器的配置文件,只有在指定--exec-driver=lxc時使用 --name="" 指定容器名字,後續能夠經過名字進行容器管理,links特性須要使用名字 --net="bridge" 容器網絡設置: bridge 使用docker daemon指定的網橋 host //容器使用主機的網絡 container:NAME_or_ID >//使用其餘容器的網路,共享IP和PORT等網絡資源 none 容器使用本身的網絡(相似--net=bridge),可是不進行配置 --privileged=false 指定容器是否爲特權容器,特權容器擁有全部的capabilities --restart="no" 指定容器中止後的重啓策略: no:容器退出時不重啓 on-failure:容器故障退出(返回值非零)時重啓 always:容器退出時老是重啓 --rm=false 指定容器中止後自動刪除容器(不支持以docker run -d啓動的容器) --sig-proxy=true 設置由代理接受並處理信號,可是SIGCHLD、SIGSTOP和SIGKILL不能被代理
參數 | 解釋 |
---|---|
--api-enable-cors=false | 開放遠程API調用的 CORS 頭信息。這個接口開關對想進行二次開發的上層應用提供了支持. |
-b, --bridge="" | 掛載已經存在的網橋設備到 Docker 容器裏。注意,使用 none 能夠停用容器裏的網絡. |
--bip="" | 使用 CIDR 地址來設定網絡橋的 IP。注意,此參數和 -b 不能一塊兒使用. |
-D, --debug=false | 開啓Debug模式。例如:docker -d -D |
-d, --daemon=false | 開啓Daemon模式. |
--dns=[] | 強制容器使用DNS服務器.例如: docker -d --dns 8.8.8.8 |
--dns-search=[] | 強制容器使用指定的DNS搜索域名.例如: docker -d --dns-search example.com |
-e, --exec-driver="native" | 強制容器使用指定的運行時驅動.例如:docker -d -e lxc |
-G, --group="docker" | 在後臺運行模式下,賦予指定的Group到相應的unix socket上。注意,當此參數 --group 賦予空字符串時,將去除組信息。 |
-g, --graph="/var/lib/docker" | 配置Docker運行時根目錄 |
-H, --host=[] | 在後臺模式下指定socket綁定,能夠綁定一個或多個 tcp://host:port, unix:///path/to/socket, fd://* 或 fd://socketfd。例如:$ docker -H tcp://0.0.0.0:2375 ps 或者 $ export DOCKER_HOST="tcp://0.0.0.0:2375" $ docker ps |
--icc=true | 啓用內聯容器的通訊. |
--ip="0.0.0.0" | 容器綁定IP時使用的默認IP地址. |
--ip-forward=true | 啓動容器的 net.ipv4.ip_forward. |
--iptables=true | 啓動Docker容器自定義的iptable規則. |
--mtu=0 | 設置容器網絡的MTU值,若是沒有這個參數,選用默認 route MTU,若是沒有默認route,就設置成常量值 1500. |
-p, --pidfile="/var/run/docker.pid" | 後臺進程PID文件路徑. |
-r, --restart=true | 重啓以前運行中的容器. |
-s, --storage-driver="" | 強制容器運行時使用指定的存儲驅動,例如,指定使用devicemapper, 能夠這樣:docker -d -s devicemapper |
--selinux-enabled=false | 啓用selinux支持 |
--storage-opt=[] | 配置存儲驅動的參數 |
--tls=false | 啓動TLS認證開關 |
--tlscacert="/Users/dxiao/.docker/ca.pem" | 經過CA認證過的的certificate文件路徑 |
--tlscert="/Users/dxiao/.docker/cert.pem" | TLS的certificate文件路徑 |
--tlskey="/Users/dxiao/.docker/key.pem" | TLS的key文件路徑 |
--tlsverify=false | 使用TLS並作後臺進程與客戶端通信的驗證 |
-v, --version=false | 顯示版本信息 |
*注意:其中帶有[] 的啓動參數能夠指定屢次,例如
docker run -a stdin -a stdout -a stderr -i -t ubuntu /bin/bash
uname -r | 查看系統內核 |
systemctl start docker | 啓動docker 境像 |
docker verison | 查看docker版本 |
docker info | 顯示docker系統的信息 |
docker search image-name | 檢索image |
docker pull image-name | 下載image |
docker images | 列出鏡像列表 |
docker rmi image-name | 刪除一個或者多個鏡像 |
docker history image-name | 顯示一個鏡像的歷史 |
*從已經建立的容器中更新鏡像,而且提交這個鏡像 *使用 Dockerfile 指令來建立一個新的鏡像 下面經過已存在的容器建立一個新的鏡像。 上面命令參數說明: 1.在Docker 註冊帳戶,發佈的鏡像都在這個頁面裏展現 3.登陸docker 4.上傳unbantu鏡像 |
經過容器建立鏡像 |
docker run image-name apt-get install -y -name | 在容器中安裝新的程序 |
docker run image-name echo "hello word" | 在容器中運行"echo"命令,輸出"hello word" |
docker run -i -t image_name /bin/bash |
交互式進入容器中 |
docker ps | 列出當前全部正在運行的container |
docker ps -a | 列出全部的container |
docker ps -l | 列出最近一次啓動的container |
docker commit ID new-image-name |
保存對容器的修改 當你對某一個容器作了修改以後(經過在容器中運行某一個命令),能夠把對容器的修改保存下來,這樣下次能夠從保存後的最新狀態運行該容器。 |
docker rm `docker ps -a -q` | 刪除全部容器 |
docker rm Name/ID |
刪除單個容器 |
docker stop Name/ID |
中止、啓動、殺死一個容器 |
docker logs Name/ID |
從一個容器中取日誌 |
docker diff Name/ID | 列出一個容器裏面被改變的文件或者目錄,list列表會顯示出三種事件,A 增長的,D 刪除的,C 被改變的 |
docker top Name/ID | 顯示一個運行的容器裏面的進程信息 |
docker cp Name:/container-path to-path |
從容器裏面拷貝文件/目錄到本地一個路徑 |
docker restart Name/ID |
重啓一個正在運行的容器 |
docker attach ID #從新啓動並運行一個交互式會話shell |
附加到一個運行的容器上面 |
docker save image-name -o file-path |
保存鏡像到一個tar包 |
docker load -i file-path |
加載一個tar包格式的鏡像 |
docker save image-name > /home/keke/main.tar *使用scp將main.tar拷到機器A上: |
從機器A拷貝到機器B |
docker login |
登錄registry server |
docker push new-image-name | 發佈docker鏡像 |
docker build命令會根據Dockerfile文件及上下文構建新Docker鏡像。構建上下文是指Dockerfile所在的本地路徑或一個URL(Git倉庫地址)。構建上下文環境會被遞歸處理,因此,構建所指定的路徑還包括了子目錄,而URL還包括了其中指定的子模塊。
將當前目錄作爲構建上下文時,能夠像下面這樣使用docker build命令構建鏡像:
$ ~/Downloads/hello-system$ sudo docker build . Sending build context to Docker daemon 70.14kB
說明:構建會在Docker後臺守護進程(daemon)中執行,而不是CLI中。構建前,構建進程會將所有內容(遞歸)發送到守護進程。大多狀況下,應該將一個空目錄做爲構建上下文環境,並將Dockerfile文件放在該目錄下。
在構建上下文中使用的Dockerfile文件,是一個構建指令文件。爲了提升構建性能,能夠經過.dockerignore文件排除上下文目錄下,不須要的文件和目錄。
Dockerfile通常位於構建上下文的根目錄下,也能夠經過-f指定該文件的位置:
$ sudo docker build -f /home/keke/Downloads/hello-system/Dockerfile .
構建時,還能夠經過-t參數指定構建成後,鏡像的倉庫,標籤等:
$ ~/Downloads/hello-system$ sudo docker build -t keke/myapp .
若是存在多個倉庫下,或使用多個鏡像標籤,就可使用多個-t參數:
$ docker build -t keke/myapp:1.0.2 -t keke/myapp:latest .
在Docker守護進程執行Dockerfile中的指令前,首先會對Dockerfile進行語法檢查,有語法錯誤時會返回:
$ docker build -t test/myapp . Sending build context to Docker daemon 2.048 kB Error response from daemon: Unknown instruction: RUNCMD
Docker 會依次執行Dockerfile中的指令,文件中的第一條指令必須是FROM,FROM指令用於指定一個基礎鏡像。
FROM指令用於指定其後構建新鏡像所使用的基礎鏡像。FROM指令必是Dockerfile文件中的首條命令,啓動構建流程後,Docker將會基於該鏡像構建新鏡像,FROM後的命令也會基於這個基礎鏡像。
Dockerfile文件格式以下:
# Comment INSTRUCTION arguments
Dockerfile文件中指令不區分大小寫,但爲了更易區分,約定使用大寫形式。
Docker 會依次執行Dockerfile中的指令,文件中的第一條指令必須是FROM,FROM指令用於指定一個基礎鏡像。
FROM <image> 或 FROM <image>:<tag>
經過FROM指定的鏡像,能夠是任何有效的基礎鏡像。FROM有如下限制:
FROM必須是Dockerfile中第一條非註釋命令 在一個Dockerfile文件中建立多個鏡像時,FROM能夠屢次出現。只需在每一個新命令FROM以前,記錄提交上次的鏡像ID。 tag或digest是可選的,若是不使用這兩個值時,會使用latest版本的基礎鏡像
RUN <command>
exec執行
RUN ["executable", "param1", "param2"]
RUN能夠執行任何命令,而後在當前鏡像上建立一個新層並提交。提交後的結果鏡像將會用在Dockerfile文件的下一步。
經過RUN執行多條命令時,能夠經過\換行執行:
RUN /bin/bash -c 'source $HOME/.bashrc; \ echo $HOME'
也能夠在同一行中,經過分號分隔命令:
RUN /bin/bash -c 'source $HOME/.bashrc; echo $HOME'
RUN指令建立的中間鏡像會被緩存,並會在下次構建中使用。若是不想使用這些緩存鏡像,能夠在構建時指定--no-cache參數,如:docker build --no-cache。
CMD ["executable","param1","param2"] CMD ["param1","param2"] CMD command param1 param2
CMD不一樣於RUN,CMD用於指定在容器啓動時所要執行的命令,而RUN用於指定鏡像構建時所要執行的命令。 CMD與RUN在功能實現上也有類似之處。如:
docker run -t -i keke/static /bin/true 等價於:cmd ["/bin/true"]
CMD在Dockerfile文件中僅可指定一次,指定屢次時,會覆蓋前的指令。 另外,docker run命令也會覆蓋Dockerfile中CMD命令。若是docker run運行容器時,使用了Dockerfile中CMD相同的命令,就會覆蓋Dockerfile中的CMD命令。 如,咱們在構建鏡像的Dockerfile文件中使用了以下指令:
CMD ["/bin/bash"]
使用docker build構建一個新鏡像,鏡像名爲keke/test。構建完成後,使用這個鏡像運行一個新容器,運行效果以下:
sudo docker run -i -t keke/test
在使用docker run運行容器時,咱們並無在命令結尾指定會在容器中執行的命令,這時Docker就會執行在Dockerfile的CMD中指定的命令。 若是不想使用CMD中指定的命令,就能夠在docker run命令的結尾指定所要運行的命令:
sudo docker run -i -t keke/test /bin/ps
這時,docker run結尾指定的/bin/ps命令覆蓋了Dockerfile的CMD中指定的命令.
ENTRYPOINT ["executable", "param1", "param2"] ENTRYPOINT command param1 param2
ENTRYPOINT與CMD很是相似,不一樣的是經過docker run執行的命令不會覆蓋ENTRYPOINT,而docker run命令中指定的任何參數,都會被當作參數再次傳遞給ENTRYPOINT。Dockerfile中只容許有一個ENTRYPOINT命令,多指定時會覆蓋前面的設置,而只執行最後的ENTRYPOINT指令。 docker run運行容器時指定的參數都會被傳遞給ENTRYPOINT,且會覆蓋CMD命令指定的參數。如,執行docker run -d時, -d參數將被傳遞給入口點。也能夠經過docker run --entrypoint重寫ENTRYPOINT入口點。 如:能夠像下面這樣指定一個容器執行程序:
ENTRYPOINT ["/usr/bin/nginx"]
完整構建代碼:
FROM ... MAINTAINER keke "2536495681@gmail.com" RUN ... # 指定容器內的程序將會使用容器的指定端口 # 配合 docker run -p EXPOSE ...
使用docker build構建鏡像,並將鏡像指定爲keke/test:
sudo docker build -t="itbilu/test" .
構建完成後,使用keke/test啓動一個容器:
sudo docker run -i -t keke/test -g "daemon off;"
在運行容器時,咱們使用了-g "daemon off;" ,這個參數將會被傳遞給ENTRYPOINT,最終在容器中執行的命令爲/usr/sbin/nginx -g "daemon off;" 。
EXPOSE <port> [<port>...]
EXPOSE並不會讓容器的端口訪問到主機。要使其可訪問,須要在docker run運行容器時經過-p來發布這些端口,或經過-P參數來發布EXPOSE導出的全部端口。
docker history images-name
dockerfile主要組成部分:
基礎鏡像信息 FROM centos:6.8
製做鏡像操做指令RUN yum insatll openssh-server -y
容器啓動時執行指令 CMD ["/bin/bash"]
dockerfile經常使用指令:
FROM 這個鏡像的媽媽是誰?(指定基礎鏡像)
MAINTAINER 告訴別人,誰負責養它?(指定維護者信息,能夠沒有)
RUN 你想讓它幹啥(在命令前面加上RUN便可)
ADD 給它點創業資金(COPY文件,會自動解壓)
WORKDIR 我是cd,今天剛化了妝(設置當前工做目錄)
VOLUME 給它一個存放行李的地方(設置卷,掛載主機目錄)
EXPOSE 它要打開的門是啥(指定對外的端口)
CMD 奔跑吧,兄弟!(指定容器啓動後的要乾的事情)
dockerfile其餘指令:
COPY 複製文件
ENV 環境變量
ENTRYPOINT 容器啓動後執行的命令
(1)FROM(指定基礎image)
構建指令,必須指定且須要在Dockerfile其餘指令的前面。後續的指令都依賴於該指令指定的image。FROM指令指定的基礎image能夠是官方遠程倉庫中的,也能夠位於本地倉庫。鏡像能夠指定標籤。格式:
FROM <image>:<tag>
(2)MAINTAINER(用來指定鏡像建立者信息)
構建指令,用於將image的製做者相關的信息寫入到image中。當咱們對該image執行docker inspect命令時,輸出中有相應的字段記錄該信息。
格式:
MAINTAINER <name>
(3)RUN
構建指令,RUN能夠運行任何被基礎image支持的命令。如基礎image選擇了ubuntu,那麼軟件管理部分只能使用ubuntu的命令。RUN指令能夠有多條,每條RUN指令將在當前鏡像基礎上執行指定命令,並提交爲新的鏡像。當命令較長時,能夠用\來換行。
該指令有兩種格式:
# 在shell終端中運行 - `/bin/sh -c` RUN <command> # 使用exec執行 RUN ["executable", "param1", "param2" ... ]
(4)CMD(設置容器啓動時執行的操做)
設置指令,用於容器啓動時指定的操做。該操做能夠是執行自定義腳本,也能夠是執行系統命令。該指令只能在文件中存在一次,若是有多個,則只執行最後一條。
該指令有三種格式:
# 格式一:like an exec, this is the preferred form CMD ["executable","param1","param2"] # 格式二:as a shell CMD command param1 param2 # 當Dockerfile指定了ENTRYPOINT,那麼使用下面的格式:做爲ENTRYPOINT的缺省參數 CMD ["param1","param2"]
注意:
1) CMD運行在鏡像構建以後,容器啓動的時候;
2) CMD只執行最後一條
3) CMD能夠被用戶指定的命令覆蓋
(5)ENTRYPOINT(設置容器啓動時執行的操做)
設置指令,指定容器啓動時執行的命令,能夠屢次設置,可是隻有最後一個有效。
兩種格式:
# 格式一:like an exec, this is the preferred form ENTRYPOINT ["executable", "param1", "param2"] # 格式二:as a shell ENTRYPOINT command param1 param2
該指令的使用分爲兩種狀況,一種是獨自使用,另外一種和CMD指令配合使用。
當獨自使用時,若是你還使用了CMD命令且CMD是一個完整的可執行的命令,那麼CMD指令和ENTRYPOINT會互相覆蓋只有最後一個CMD或者ENTRYPOINT有效:
# CMD指令將不會被執行,只有ENTRYPOINT指令被執行 CMD echo 「Hello, World!」 ENTRYPOINT ls -l
另外一種用法和CMD指令配合使用來指定ENTRYPOINT的默認參數,這時CMD指令不是一個完整的可執行命令,僅僅是參數部分;ENTRYPOINT指令只能使用JSON方式指定執行命令,而不能指定參數:
FROM ubuntu CMD ["-l"] ENTRYPOINT ["/usr/bin/ls"]
注意:
1) 和CMD指令基本同樣,可是不能被用戶指定的命令所覆蓋;
2) 能夠和CMD組合使用,ENTRYPOINT提供不可變得命令,CMD提供缺省參數。
(6)USER(設置容器的用戶)
設置指令,設置啓動容器的用戶,默認是root用戶。
# 指定memcached的運行用戶 ENTRYPOINT ["memcached"] USER daemon # 或 ENTRYPOINT ["memcached", "-u", "daemon"]
(7)EXPOSE(指定容器須要映射到宿主機器的端口)
設置指令,該指令會將容器中的端口映射成宿主機器中的某個端口。格式爲:
EXPOSE <port> [<port> ...] 例如: EXPOSE 80 443 11211
告訴Docker服務端容器暴露的端口號,供互聯繫統使用。在啓動容器時須要經過-P,Docker主機會自動分配一個端口轉發到指定的端口;使用-p,則能夠具體指定哪一個本地端口映射過來。
(8)ENV(用於設置環境變量)
構建指令,在image中設置一個環境變量。格式:
ENV <key> <value>
設置了後,後續的RUN命令均可以使用,容器啓動後,能夠經過docker inspect
查看這個環境變量,也能夠經過在docker run --env key=value
時設置或修改環境變量。
假如你安裝了JAVA程序,須要設置JAVA_HOME
,那麼能夠在Dockerfile中這樣寫:
ENV JAVA_HOME /path/to/java/dirent
(9)ADD(從src複製文件到容器的dest路徑)
構建指令,全部拷貝到容器中的文件和文件夾權限爲0755,uid和gid爲0。格式爲:
ADD <src> <dest> <src> 是相對被構建的源目錄的相對路徑,能夠是文件或目錄的路徑,也能夠是一個遠程的文件url;<dest>是容器中的絕對路徑。 該命令將複製指定的<src>到容器中的<dest>。其中<src>能夠是Dockerfile所在目錄的一個相對路徑(文件或目錄);也能夠是一個URL;還能夠是一個tar文件(自動解壓爲目錄)。 若是是一個目錄,那麼會將該目錄下的全部文件添加到容器中,不包括目錄;若是文件是可識別的壓縮格式,則docker會幫忙解壓縮(注意壓縮格式);若是<src>是文件且<dest>中不使用斜槓結束,則會將<dest>視爲文件,<src>的內容會寫入<dest>;若是<src>是文件且<dest>中使用斜槓結束,則會<src>文件拷貝到<dest>目錄下。
(10)COPY
格式爲
COPY <src> <dest>
複製本地主機的<src>
(爲Dockerfile所在目錄的相對路徑,文件或目錄)爲容器中的<dest>
。目標路徑不存在時,會自動建立。
當使用本地目錄爲源目錄時,推薦使用COPY。
(11)VOLUME(指定掛載點))
設置指令,使容器中的一個目錄具備持久化存儲數據的功能,該目錄能夠被容器自己使用,也能夠共享給其餘容器使用。咱們知道容器使用的是AUFS,這種文件系統不能持久化數據,當容器關閉後,全部的更改都會丟失。當容器中的應用有持久化數據的需求時能夠在Dockerfile中使用該指令。格式:
VOLUME ["<mountpoint>"]
示例:
FROM base VOLUME ["/tmp/data"]
運行經過該Dockerfile生成image的容器,/tmp/data
目錄中的數據在容器關閉後,裏面的數據還存在。例如另外一個容器也有持久化數據的需求,且想使用上面容器共享的/tmp/data
目錄,那麼能夠運行下面的命令啓動一個容器:
docker run -t -i -rm -volumes-from container1 image2 bash
# container1爲第一個容器的ID,image2爲第二個容器運行image的名字。
(12)WORKDIR(切換目錄)
設置指令,能夠屢次切換(至關於cd命令),對RUN,CMD,ENTRYPOINT生效。格式:
WORKDIR /path/to/workdir 示例: # 在 /p1/p2 下執行 vim a.txt WORKDIR /p1 WORKDIR p2 RUN vim a.txt
(13)ONBUILD(在子鏡像中執行)
ONBUILD <Dockerfile關鍵字> # ONBUILD 指定的命令在構建鏡像時並不執行,而是在它的子鏡像中執行。
(14)ARG(指定構建過程當中使用的環境變量)
ARG buildno ARG password RUN echo "Build number: $buildno" RUN script-requiring-password.sh "$password"
docker run -d -p 4000:80 --name [name] #能夠在 Dokcer 宿主機上指定一個具體的端口映射到容器的80端口上
docker run -d container-name #建立守護容器 docker top container-name #查看容器內進程 docker exec container-name touch a.txt #在容器內部運行進程 docker stop container-name #中止容器
docker login時出現問題以下: Error saving credentials: error storing credentials - err: exit status 1, out: `The connection is closed` 解決方案: sudo apt install gnupg2 pass
https://www.cnblogs.com/52fhy/p/5638571.html
https://github.com/KeKe-Li/docker-directive
https://www.cnblogs.com/52fhy/p/5638571.html