梳理下自己平時操作Docker時的一些命令和注意細節:
Docker 命令幫助
$ sudo docker
Commands:
attach Attach to a running container
--將終端依附到容器上 1> 運行一個交互型容器 [root@localhost ~]# docker run -i -t centos /bin/bash [root@f0a02b473067 /]# 2> 在另一個窗口上查看該容器的狀態 [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d4a75f165ce6 centos "/bin/bash" 5 seconds ago Up 5 seconds cranky_mahavira 3> 退出第一步中運行的容器 [root@d4a75f165ce6 /]# exit exit 4> 查看該容器的狀態 [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d4a75f165ce6 centos "/bin/bash" 2 minutes ago Exited (0) 23 seconds ago cranky_mahavira 可見此時容器的狀態是Exited,那么,如何再次運行這個容器呢?可以使用docker start命令 5> 再次運行該容器 [root@localhost ~]# docker start cranky_mahavira cranky_mahavira 6> 再次查看該容器的狀態 [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d4a75f165ce6 centos "/bin/bash" 6 minutes ago Up 29 seconds cranky_mahavira 因為該容器是交互型的,但此刻我們發現沒有具體的終端可以與之交互,這時可使用attach命令。 7> 通過attach命令進行交互 [root@localhost ~]# docker attach cranky_mahavira [root@d4a75f165ce6 /]# build Build an image from a Dockerfile --通過Dockerfile創建鏡像 commit Create a new image from a container's changes --通過容器創建本地鏡像 注意:如果是要push到docker hub中,注意生成鏡像的命名 [root@localhost ~]# docker commit centos_v1 centos:v1 68ad49c999496cff25fdda58f0521530a143d3884e61bce7ada09bdc22337638 [root@localhost ~]# docker push centos:v1 You cannot push a "root" repository. Please rename your repository to <user>/<repo> (ex: <user>/centos) 用centos:v1就不行,因為它push到docker hub中時,是推送到相應用戶下,必須指定用戶名。譬如我的用戶名是ivictor,則新生成的本地鏡像命名為: docker push victor/centos:v1,其中v1是tag,可不寫,默認是latest cp Copy files/folders from a container to a HOSTDIR or to STDOUT --在宿主機和容器之間相互COPY文件 cp的用法如下: Usage: docker cp [OPTIONS] CONTAINER:PATH LOCALPATH|- docker cp [OPTIONS] LOCALPATH|- CONTAINER:PATH 如:容器mysql中/usr/local/bin/存在docker-entrypoint.sh文件,可如下方式copy到宿主機 # docker cp mysql:/usr/local/bin/docker-entrypoint.sh /root 修改完畢后,將該文件重新copy回容器 # docker cp /root/docker-entrypoint.sh mysql:/usr/local/bin/ create Create a new container --創建一個新的容器,注意,此時,容器的status只是Created diff Inspect changes on a container's filesystem --查看容器內發生改變的文件,以我的mysql容器為例 [root@localhost ~]# docker diff mysqldb C /root A /root/.bash_history A /test1.txt A /test.tar A /test.txt C /run C /run/mysqld A /run/mysqld/mysqld.pid A /run/mysqld/mysqld.sock 不難看出,C對應的均是目錄,A對應的均是文件 events Get real time events from the server --實時輸出Docker服務器端的事件,包括容器的創建,啟動,關閉等。 譬如: [root@localhost ~]# docker events 2015-09-08T17:40:13.000000000+08:00 d2a2ef5ddb90b505acaf6b59ab43eecf7eddbd3e71f36572436c34dc0763db79: (from wordpress) create 2015-09-08T17:40:14.000000000+08:00 d2a2ef5ddb90b505acaf6b59ab43eecf7eddbd3e71f36572436c34dc0763db79: (from wordpress) die 2015-09-08T17:42:10.000000000+08:00 839866a338db6dd626fa8eabeef53a839e4d2e2eb16ebd89679aa722c4caa5f7: (from mysql) start exec Run a command in a running container --用於容器啟動之后,執行其它的任務 通過exec命令可以創建兩種任務:后台型任務和交互型任務 后台型任務:docker exec -d cc touch 123 其中cc是容器名 交互型任務: [root@localhost ~]# docker exec -i -t cc /bin/bash root@1e5bb46d801b:/# ls 123 bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var export Export a container's filesystem as a tar archive --將容器的文件系統打包成tar文件 有兩種方式(mysqldb為容器名): docker export -o mysqldb1.tar mysqldb docker export mysqldb > mysqldb.tar history Show the history of an image --顯示鏡像制作的過程,相當於dockfile images List images --列出本機的所有鏡像 import Import the contents from a tarball to create a filesystem image --根據tar文件的內容新建一個鏡像,與之前的export命令相對應 [root@localhost ~]# docker import mysqldb.tar mysql:v1 eb81de183cd94fd6f0231de4ff29969db822afd3a25841d2dc9cf3562d135a10 [root@localhost