咱們使用docker --help來查看下都有哪些命令linux
[root@docker ~]# docker --help Usage: docker [OPTIONS] COMMAND [arg...] docker daemon [ --help | ... ] docker [ --help | -v | --version ] A self-sufficient runtime for containers. Options: --config=~/.docker Location of client config files #客戶端配置文件的位置 -D, --debug=false Enable debug mode #啓用Debug調試模式 -H, --host=[] Daemon socket(s) to connect to #守護進程的套接字(Socket)鏈接 -h, --help=false Print usage #打印使用 -l, --log-level=info Set the logging level #設置日誌級別 --tls=false Use TLS; implied by--tlsverify # --tlscacert=~/.docker/ca.pem Trust certs signed only by this CA #信任證書籤名CA --tlscert=~/.docker/cert.pem Path to TLS certificate file #TLS證書文件路徑 --tlskey=~/.docker/key.pem Path to TLS key file #TLS密鑰文件路徑 --tlsverify=false Use TLS and verify the remote #使用TLS驗證遠程 -v, --version=false Print version information and quit #打印版本信息並退出 Commands: attach Attach to a running container #當前shell下attach鏈接指定運行鏡像 build Build an image from a Dockerfile #經過Dockerfile定製鏡像 commit Create a new image from a container's changes #提交當前容器爲新的鏡像 cp Copy files/folders from a container to a HOSTDIR or to STDOUT #從容器中拷貝指定文件或者目錄到宿主機中 create Create a new container #建立一個新的容器,同run 但不啓動容器 diff Inspect changes on a container's filesystem #查看docker容器變化 events Get real time events from the server#從docker服務獲取容器實時事件 exec Run a command in a running container#在已存在的容器上運行命令 export Export a container's filesystem as a tar archive #導出容器的內容流做爲一個tar歸檔文件(對應import) history Show the history of an image #展現一個鏡像造成歷史 images List images #列出系統當前鏡像 import Import the contents from a tarball to create a filesystem image #從tar包中的內容建立一個新的文件系統映像(對應export) info Display system-wide information #顯示系統相關信息 inspect Return low-level information on a container or image #查看容器詳細信息 kill Kill a running container #kill指定docker容器 load Load an image from a tar archive or STDIN #從一個tar包中加載一個鏡像(對應save) login Register or log in to a Docker registry#註冊或者登錄一個docker源服務器 logout Log out from a Docker registry #從當前Docker registry退出 logs Fetch the logs of a container #輸出當前容器日誌信息 pause Pause all processes within a container#暫停容器 port List port mappings or a specific mapping for the CONTAINER #查看映射端口對應的容器內部源端口 ps List containers #列出容器列表 pull Pull an image or a repository from a registry #從docker鏡像源服務器拉取指定鏡像或者庫鏡像 push Push an image or a repository to a registry #推送指定鏡像或者庫鏡像至docker源服務器 rename Rename a container #重命名容器 restart Restart a running container #重啓運行的容器 rm Remove one or more containers #移除一個或者多個容器 rmi Remove one or more images #移除一個或多個鏡像(無容器使用該鏡像才能夠刪除,不然須要刪除相關容器才能夠繼續或者-f強制刪除) run Run a command in a new container #建立一個新的容器並運行一個命令 save Save an image(s) to a tar archive#保存一個鏡像爲一個tar包(對應load) search Search the Docker Hub for images #在docker hub中搜索鏡像 start Start one or more stopped containers#啓動容器 stats Display a live stream of container(s) resource usage statistics #統計容器使用資源 stop Stop a running container #中止容器 tag Tag an image into a repository #給源中鏡像打標籤 top Display the running processes of a container #查看容器中運行的進程信息 unpause Unpause all processes within a container #取消暫停容器 version Show the Docker version information#查看容器版本號 wait Block until a container stops, then print its exit code #截取容器中止時的退出狀態值 Run 'docker COMMAND --help' for more information on a command. #運行docker命令在幫助能夠獲取更多信息
docker search jenkins # 搜索全部的jenkins的docker鏡像
[root@HH ~]# docker search jenkins NAME DESCRIPTION STARS OFFICIAL AUTOMATED jenkins Official Jenkins Docker image 4453 [OK] jenkins/jenkins The leading open source automation server 1706 jenkinsci/blueocean https://jenkins.io/projects/blueocean 442 jenkinsci/jenkins Jenkins Continuous Integration and Delivery … 371 jenkinsci/jnlp-slave A Jenkins slave using JNLP to establish conn… 114 [OK] jenkins/jnlp-slave a Jenkins agent (FKA "slave") using JNLP to … 96 [OK] jenkinsci/slave Base Jenkins slave docker image 57 [OK] jenkinsci/ssh-slave A Jenkins SSH Slave docker image 39 [OK] cloudbees/jenkins-enterprise CloudBees Jenkins Enterprise (Rolling releas… 34 [OK] jenkins/slave base image for a Jenkins Agent, which includ… 32
NAME:名稱。DESCRIPTION:描述。STARS:點贊數。OFFICIAL:官方。AUTOMATED:自動化web
從docker registry獲取鏡像的命令是docker pull。命令格式是:docker
docker pull [選項][docker registry地址] 倉庫名:標籤shell
docker是把應用程序和其依賴打包在image文件裏面,只有經過這個鏡像文件才能生成docker容器。json
一個image文件能夠生成多個容器實例。vim
可使用docker pull命令來從倉庫獲取所須要的鏡像,好比下載一個jenkins的鏡像centos
docker pull jenkins # 獲取jenkins鏡像
[root@HH ~]# docker pull jenkins Using default tag: latest latest: Pulling from library/jenkins 55cbf04beb70: Pull complete 1607093a898c: Pull complete 9a8ea045c926: Pull complete d4eee24d4dac: Pull complete c58988e753d7: Pull complete 794a04897db9: Pull complete 70fcfa476f73: Pull complete 0539c80a02be: Pull complete 54fefc6dcf80: Pull complete 911bc90e47a8: Pull complete 38430d93efed: Pull complete 7e46ccda148a: Pull complete c0cbcb5ac747: Pull complete 35ade7a86a8e: Pull complete aa433a6a56b1: Pull complete 841c1dd38d62: Pull complete b865dcb08714: Pull complete 5a3779030005: Pull complete 12b47c68955c: Pull complete 1322ea3e7bfd: Pull complete Digest: sha256:eeb4850eb65f2d92500e421b430ed1ec58a7ac909e91f518926e02473904f668 Status: Downloaded newer image for jenkins:latest docker.io/library/jenkins:latest
拉取指定版本,用:瀏覽器
docker pull jenkins:1.12 # 獲取jenkins1.12的鏡像
下載過程能夠看出鏡像是由多層存儲構成的。下載也是一層一層,並不是單一的文件。安全
下載過程當中給出每一層的前12位ID。下載結束後會給出sha246的文件一致性校驗值bash
docker images # 查看docker鏡像
若是要移除本地的鏡像,可使用docker rmi命令(在刪除鏡像以前先用docker rm刪除依賴於這個鏡像的全部容器)。注意docker rm 命令是移除容器。
docker rmi imageID #刪除docker鏡像 或者 docker rmi 鏡像名字
刪除全部的鏡像
docker rmi `docker images -aq` #一次性刪除全部鏡像記錄,反單引號
有時候咱們的鏡像,別人也要使用,咱們能夠把咱們的鏡像導出給別人使用,使用docker save命令
docker save jenkins > /tmp/jenkins.tar.gz # 導出docker鏡像到本地的tmp目錄下
上面別人給咱們導出了他的鏡像,那咱們就要導入了,刪除本身的docker鏡像在導入
docker load < /tmp/jenkins.tar.gz # 導入本地鏡像到docker鏡像庫
導入完以後查看docker鏡像庫
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE jenkins latest cd14cecfdb3a 14 months ago 696MB
啓動容器有兩種方式,一種是基於鏡像新建一個容器並啓動,另一個是將在終止狀態(stopped)的容器從新啓動。
由於Docker的容器實在過輕量級了,不少時候用戶都是隨時刪除和新建立容器。
使用docker run啓動容器
[root@HH ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE jenkins latest cd14cecfdb3a 14 months ago 696MB [root@HH ~]# docker run cd14
這樣就啓動了一個容器,但這樣有缺點,咱們關掉窗口或者ctrl+c就終止了,因此在啓動的時候咱們能夠加上參數-d,表示後臺啓動
[root@HH ~]# docker run -d jenkins 也能夠經過id啓動 4ee88fb080c7718fd68bc5dfbea01e10048df8fd00e461cdec166be594064293
docker run就是運行容器的命令。
參數
當利用docker run來建立容器時,Docker在後臺運行的標準操做包括
經過docker ps就能夠查看運行的容器
[root@HH ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4ee88fb080c7 jenkins "/bin/tini -- /usr/l…" 4 minutes ago Up 4 minutes 8080/tcp, 50000/tcp brave_wilson
後面的NAMES參數是docker給咱們生成的,咱們也能夠自定義,在啓動的時候加上--name參數
[root@HH ~]# docker run -d --name MyJenkins jenkins 1603ebfad9aaff6c2ec1bfa6e5300ac711a716d8bea3b0fed37c6bbc38b354b1 [root@HH ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1603ebfad9aa jenkins "/bin/tini -- /usr/l…" 9 seconds ago Up 8 seconds 8080/tcp, 50000/tcp MyJenkins
經過docker stop 容器id/names均可以中止容器
[root@HH ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4ee88fb080c7 jenkins "/bin/tini -- /usr/l…" 7 minutes ago Up 7 minutes 8080/tcp, 50000/tcp brave_wilson [root@HH ~]# [root@HH ~]# docker stop brave_wilson brave_wilson [root@HH ~]# docker stop 40db 40db
docker ps -a 能夠查看中止和運行的容器
[root@HH ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 40db302d030b jenkins "/bin/tini -- /usr/l…" 2 minutes ago Exited (143) About a minute ago admiring_morse 4ee88fb080c7 jenkins "/bin/tini -- /usr/l…" 9 minutes ago Exited (143) 2 minutes ago brave_wilson d6e046c9d2ff cd14 "/bin/tini -- /usr/l…" 12 minutes ago Exited (130) 11 minutes ago vigorous_greider
經過docker rm 容器ID來刪除
[root@HH ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 40db302d030b jenkins "/bin/tini -- /usr/l…" About an hour ago Exited (143) About an hour ago admiring_morse 4ee88fb080c7 jenkins "/bin/tini -- /usr/l…" 2 hours ago Exited (143) About an hour ago brave_wilson d6e046c9d2ff cd14 "/bin/tini -- /usr/l…" 2 hours ago Exited (130) 2 hours ago vigorous_greider [root@HH ~]# docker rm 40db 刪除容器記錄 40db [root@HH ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4ee88fb080c7 jenkins "/bin/tini -- /usr/l…" 2 hours ago Exited (143) About an hour ago brave_wilson d6e046c9d2ff cd14 "/bin/tini -- /usr/l…" 2 hours ago Exited (130) 2 hours ago vigorous_greider
經過rm刪除的是已中止的,若是是正在運行的會報錯
[root@HH ~]# docker rm 00436 Error response from daemon: You cannot remove a running container 00436eade5368cad1f93e9e1ef9c3cc5da3738a0f17a7e1b6e2669e7c379ca54. Stop the container before attempting removal or force remove
能夠經過-f參數強制刪除
[root@HH ~]# docker rm -f 00436 00436 [root@HH ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3c4cb6a23761 jenkins "/bin/tini -- /usr/l…" 30 minutes ago Up 30 minutes 50000/tcp, 0.0.0.0:8000->8080/tcp myjenkins
一次性刪除全部容器記錄
docker rm `docker ps -aq` # 一次性刪除全部容器id記錄
` ` #反引號是取命令的運行結果
經過docker start 容器ID來啓動
[root@HH ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4ee88fb080c7 jenkins "/bin/tini -- /usr/l…" 2 hours ago Exited (143) About an hour ago brave_wilson d6e046c9d2ff cd14 "/bin/tini -- /usr/l…" 2 hours ago Exited (130) 2 hours ago vigorous_greider [root@HH ~]# docker start 4ee8 啓動中止的容器 4ee8 [root@HH ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4ee88fb080c7 jenkins "/bin/tini -- /usr/l…" 2 hours ago Up 3 seconds 8080/tcp, 50000/tcp brave_wilson d6e046c9d2ff cd14 "/bin/tini -- /usr/l…" 2 hours ago Exited (130) 2 hours ago vigorous_greider
使用-d參數時,容器啓動後會進入後臺。某些時候須要進入容器進行操做,有不少種方法,包括使用docker attach命令或nsenter工具等。
docker exec -it 容器id /bin/bash docker attach 容器id
#1.咱們進入交互式的centos容器中,發現沒有vim命令 docker run -it centos
#2.在當前容器中,安裝一個vim yum install -y vim
#3.安裝好vim以後,exit退出容器 exit
#4.查看剛纔安裝好vim的容器記錄 docker container ls -a
#5.提交這個容器,建立新的image docker commit 059fdea031ba chaoyu/centos-vim
#6.查看鏡像文件 [root@master /home]docker images REPOSITORY TAG IMAGE ID CREATED SIZE chaoyu/centos-vim latest fd2685ae25fe 5 minutes ago 348MB
上面咱們使用-d參數後臺啓動了jenkins,可是還不能訪問它,若是想訪問,還須要加-p或者-P參數,返回的是容器ID
[root@HH ~]# docker run -d --name myjenkins -p 8000:8080 jenkins 3c4cb6a2376121fdc71303232cd3e68ffb6683c2c24aeba544c3d65e17c0e9be [root@HH ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3c4cb6a23761 jenkins "/bin/tini -- /usr/l…" 5 seconds ago Up 4 seconds 50000/tcp, 0.0.0.0:8000->8080/tcp myjenkins
-p 8000:8080表示將本機的8000端口映射到容器的8080端口,瀏覽器訪問8000端口就是訪問容器的8080端口
設置成功後,咱們在瀏覽器輸入以下的地址就能看到jenkins的頁面了
http://49.235.160.132:8000
-P 參數會隨機映射端口到容器開放的網絡端口
[root@HH ~]# docker run -d -P jenkins 00436eade5368cad1f93e9e1ef9c3cc5da3738a0f17a7e1b6e2669e7c379ca54 [root@HH ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 00436eade536 jenkins "/bin/tini -- /usr/l…" 5 seconds ago Up 3 seconds 0.0.0.0:32769->8080/tcp, 0.0.0.0:32768->50000/tcp angry_curran 3c4cb6a23761 jenkins "/bin/tini -- /usr/l…" 3 minutes ago Up 3 minutes 50000/tcp, 0.0.0.0:8000->8080/tcp myjenkins
上面會將宿主機的32769端口映射到容器的8080端口,訪問下面地址也是同樣的
http://49.235.160.132:8000
舒適提示:若是訪問失敗的話,請檢查本身的防火牆,以及雲服務器的安全組
不間斷顯示log:docker logs -f 容器ID
[root@HH ~]# docker logs -f 00436 Running from: /usr/share/jenkins/jenkins.war webroot: EnvVars.masterEnvVars.get("JENKINS_HOME") Sep 28, 2019 2:37:31 PM Main deleteWinstoneTempContents WARNING: Failed to delete the temporary Winstone file /tmp/winstone/jenkins.war Sep 28, 2019 2:37:31 PM org.eclipse.jetty.util.log.JavaUtilLog info INFO: Logging initialized @1325ms Sep 28, 2019 2:37:31 PM winstone.Logger logInternal INFO: Beginning extraction from war file Sep 28, 2019 2:37:33 PM org.eclipse.jetty.util.log.JavaUtilLog warn WARNING: Empty contextPath Sep 28, 2019 2:37:33 PM org.eclipse.jetty.util.log.JavaUtilLog info INFO: jetty-9.2.z-SNAPSHOT
如今咱們已經映射了兩個端口,一個是32769,一個是8000,以下
[root@HH ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 00436eade536 jenkins "/bin/tini -- /usr/l…" 8 minutes ago Up 8 minutes 0.0.0.0:32769->8080/tcp, 0.0.0.0:32768->50000/tcp angry_curran 3c4cb6a23761 jenkins "/bin/tini -- /usr/l…" 12 minutes ago Up 12 minutes 50000/tcp, 0.0.0.0:8000->8080/tcp myjenkins
使用docker port 容器ID就能夠查看端口映射
[root@HH ~]# docker port 00436 50000/tcp -> 0.0.0.0:32768 8080/tcp -> 0.0.0.0:32769
查看docker的xinx
[root@HH ~]# docker info Client: Debug Mode: false Server: Containers: 4 # 容器總數 Running: 1 # 運行的容器個數 Paused: 0 # 暫停的容器個數 Stopped: 3 # 中止的容器個數 Images: 1 # 鏡像個數 Server Version: 19.03.2 Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge host ipvlan macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: inactive Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: 894b81a4b802e4eb2a91d1ce216b8817763c29fb runc version: 425e105d5a03fabd737a126ad93d62a9eeede87f init version: fec3683 Security Options: seccomp Profile: default Kernel Version: 3.10.0-957.21.3.el7.x86_64 Operating System: CentOS Linux 7 (Core) OSType: linux Architecture: x86_64 CPUs: 1 Total Memory: 991.2MiB Name: HH ID: YNAQ:DAQM:U3EC:6DQS:HL5N:PVME:5KST:I3VD:K4VK:AZJ4:NJIY:AEHW Docker Root Dir: /var/lib/docker Debug Mode: false Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false WARNING: bridge-nf-call-iptables is disabled WARNING: bridge-nf-call-ip6tables is disabled
鏡像 docker image ls # 查看全部鏡像 docker images # 查看全部鏡像 docker pull 鏡像名 # docker倉庫,dockerhub docker push 鏡像名 # 把本地的鏡像推送到 dockerhub倉庫 docker search 鏡像名 # 搜索鏡像 docker rmi 容器ID # 刪除鏡像 docker version # 查看docker版本,查看到server 和client兩個端 systemctl start docker # 啓動docker docker save 鏡像名 > /data/centos.tar.gz # 導出鏡像 docker load < /data/centos.tar.gz # 導入鏡像 docker run 鏡像名 # 運行鏡像文件,產生一個容器實例 容器 docker start 容器id # 啓動容器 docker stop 容器id # 中止容器 docker exec -it 容器id # 進入正在運行的容器 -i 交互式操做 -t 開啓一個終端 docker run 鏡像名 # 建立容器實例 docker rm 容器id # 刪除容器記錄,必須提早docker stop 容器id ,只能殺死已經中止的容器 docker rm -f 容器id # 能夠刪除運行中的容器 docker ps # 查看容器正在運行記錄 docker ps -aq # 顯示全部容器記錄的id號 -a 顯示全部容器記錄 -q 顯示容器id docker rm `docker ps -aq` # 一次性刪除全部容器記錄 docker container ls # 查看容器正在運行記錄 docker commit 容器id記錄 # 提交這個容器,建立一個新的鏡像 docker logs # 查看容器運行日誌 -f #不間斷打印容器日誌 docker port #查看容器的端口映射關係(外部訪問到容器內的端口) docker run -d centos -P -d 後臺運行 -P 隨機映射端口 -p 9000(宿主機):5000(容器內) --name 給建立的容器記錄,添加別名