三:Docker從入門到精通(實戰篇②)

啓動容器

啓動容器有兩種方式,一種是基於鏡像新建一個容器並啓動,另外一種是將在終止狀態(stopped)的容器重新啓動。
因爲Docker的容器實在太輕量級了,很多時候用戶都是隨時刪除和新創建容器。所以主要命令還是docker run
新建容器
[root@server ~]# docker create -it centos /bin/bash #創建一個容器
a661c9dd447066f326e13389b4e11222f1430e1cbd56ef4c38416fdd51b1394e
[root@server ~]# docker ps -a  #查看容器狀態,可以看到通過create創建的容器處於停止狀態
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a661c9dd4470 centos “/bin/bash” 39 seconds ago Created angry_wu
[root@server ~]# docker start a661c9dd4470    #根據ID啓動上面創建的容器
a661c9dd4470
[root@server ~]# docker ps -a  #查看容器狀態,處於運行狀態
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a661c9dd4470 centos “/bin/bash” About a minute ago Up 3 seconds angry_wu
[root@server ~]# docker attach a661c9dd4470    #根據ID進入到啓動的容器中
[root@a661c9dd4470 /]# ls    
anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@a661c9dd4470 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 08:35 pts/0 00:00:00 /bin/bash
root 15 1 0 08:38 pts/0 00:00:00 ps -ef
[root@a661c9dd4470 /]# exit    #退出容器
exit
新建容器並啓動 docker run
[root@server ~]# docker run --name mydocker -t -i centos /bin/bash
[root@8bad1a6db7b2 /]# pwd
/
[root@8bad1a6db7b2 /]# ls
anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

–name: 給容器定義一個名稱
-t:讓Docker分配一個僞終端並綁定到容器的標準輸入上
-i:讓容器的標準輸入保持打開
/bin/bash:執行一個命令
啓動容器
容器的核心爲所執行的應用程序,所需要的資源都是應用程序運行所需的。
[root@server ~]# docker start 8bad1a6db7b2   #啓動一個終止的容器
8bad1a6db7b2
守護進程運行(後臺運行)
更多的時候,需要讓Docker容器在後臺運行,而不是直接把命令的結果輸出在當前宿主機下。此時可以加-d參數來實現。
[root@server ~]# docker run -d centos /bin/bash -c “while true; do echo hello world; sleep 1; done”
0ca1770a1fd0b21ae05f2f6bd9befbb9eef55576ab0a0b51fc6dc7e427128174
[root@server ~]# docker ps  #查看正在運行的docker容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ca1770a1fd0 centos “/bin/bash -c 'while…” 27 seconds ago Up 25 seconds ecstatic_wu
8bad1a6db7b2 centos “/bin/bash” 18 minutes ago Up 10 minutes mydocker
[root@server ~]# docker logs 0ca1770a1fd0  #獲取容器輸出信息,通過docker logs命令
hello world
hello world
hello world

停止容器
可以使用docker stop容器來終止一個正在運行的容器。
此外,當Docker容器中指定的應用終結時,容器也會自動終結,例如啓動一個終端容器,用戶通過exit命令或者ctrl+d來退出終端時,所創建的容器立刻停止。
[root@server ~]# docker ps -a   #查看所有的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ca1770a1fd0 centos “/bin/bash -c 'while…” 8 minutes ago Up 7 minutes ecstatic_wu
8bad1a6db7b2 centos “/bin/bash” 26 minutes ago Up 17 minutes mydocker
[root@server ~]# docker stop 8bad1a6db7b2   #停止容器
8bad1a6db7b2
[root@server ~]# docker stop 0ca1770a1fd0   #停止容器
0ca1770a1fd0
[root@server ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ca1770a1fd0 centos “/bin/bash -c 'while…” 8 minutes ago Exited (137) 3 seconds ago ecstatic_wu
8bad1a6db7b2 centos “/bin/bash” 27 minutes ago Exited (137) 26 seconds ago mydocker

進入容器
在使用-d參數時,容器啓動後會進入後臺,某些時候需要進入容器操作時,有很多中方法,包括docker attach命令或者docker exec命令。
attache命令
[root@server ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8bad1a6db7b2 centos “/bin/bash” 32 minutes ago Exited (137) 5 minutes ago mydocker
[root@server ~]# docker start mydocker  #啓動已經停止的容器,start可以跟容器ID,也可以是名字
mydocker
[root@server ~]# docker attach mydocker  #通過docker attach進入容器
[root@8bad1a6db7b2 /]#

exec命令
[root@server ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8bad1a6db7b2 centos “/bin/bash” About an hour ago Up 13 minutes mydocker
[root@server ~]# docker exec -it mydocker /bin/bash
[root@8bad1a6db7b2 /]# exit
exit
[root@server ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8bad1a6db7b2 centos “/bin/bash” About an hour ago Up 14 minutes mydocker

導出容器和導入容器

某些時候,需要將容器從一個系統遷移到另外一個系統,此時可以使用Docker的導入和導出功能。
導出容器
如果要導出本地某個容器,可以使用docker export命令,導出容器是指導出一個已經創建的容器到一個文件,不管此時這個容器是否處於運行狀態,export後需要跟導出的 容器ID 或者 容器命令 都可以。
[root@server ~]# docker export mydocker > centos.tar  #導出一個容器,也可以使用docker export -o centos.tar mydocker。 -o 指定導出的名字
[root@server ~]# ll centos.tar
-rw-r–r-- 1 root root 209473024 1月 5 17:56 centos.tar
導入容器
導出的文件又可以使用docker import命令導入變成鏡像。
[root@server ~]# cat centos.tar | docker import - test/centos:7.3
sha256:a8375a86d721a718d70dc99a49005d70ce6a7b65423c1bbd1ce34b23ec787aa9
[root@server ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test/centos 7.3 a8375a86d721 7 seconds ago 202MB

刪除容器

可以使用docker rm來刪除一個處於終止狀態的容器
[root@server ~]# docker ps -a   #查看所有容器當前狀態
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ca1770a1fd0 centos “/bin/bash -c 'while…” About an hour ago Exited (137) About an hour ago ecstatic_wu
a661c9dd4470 centos “/bin/bash” 2 hours ago Exited (0) 2 hours ago angry_wu
[root@server ~]# docker rm a661c9dd4470   #刪除已經停止的容器
a661c9dd4470

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章