1.測試docker是否存在
-
sudo docker info
傳回docker的基本資訊
$ sudo docker info
//出現一下内容
Containers: 2
Running: 0
Paused: 0
Stopped: 2
Images: 1
...
2.運作第一個容器
$ sudo docker run -i -t ubuntu /bin/bash
//開始下載下傳容器并運作
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
473ede7ed136: Pull complete
c46b5fa4d940: Pull complete
93ae3df89c92: Pull complete
6b1eed27cade: Pull complete
Digest: sha256:29934af957c53004d7fb6340139880d23fb1952505a15d69a03af0d1418878cb
Status: Downloaded newer image for ubuntu:latest
root@363ed45619ae:/#
- 注意 可通過 docker help 或者 man docker-run 來擷取 docker的指令清單
-
解析:
sudo docker run -i -t ubuntu /bin/bash
其中-i 标志保證容器中STDIN是開啟的,持久的标準輸入,-t标志是告訴docker為要建立的容器配置設定一個僞tty終端。 Ubuntu是 建立一個Ubuntu鏡像,同時告訴新容器中要運作:/bin/bash 指令。是以就到:root@363ed45619ae:/# 。
3.使用容器
其中容器ID 363ed45619ae 。 也是它的主機名。
root@363ed45619ae:/home# hostname
363ed45619ae
root@363ed45619ae:/home# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 363ed45619ae
- 網絡配置
root@363ed45619ae:/home# ip a
- 檢查容器程序
root@363ed45619ae:/home# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 18508 3428 pts/0 Ss 07:34 0:00 /bin/bash
root 21 0.0 0.0 34400 2860 pts/0 R+ 07:47 0:00 ps -aux
- 在容器中安裝軟體包
root@363ed45619ae:~# apt-get upate root@363ed45619ae:~# apt-get install vim
- 退出容器
exit
退出後,回到自己的實體機
- 檢視目前系統中的容器清單
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
363ed45619ae ubuntu "/bin/bash" 19 minutes ago Exited (0) 31 seconds ago keen_boyd
31ef04a4ff1b hello-world "/hello" 3 days ago Exited (0) 3 days ago gifted_austin
e4166694ac7c hello-world "/hello" 3 days ago Exited (0) 3 days ago brave_kare
- 檢視最後一次運作的容器
$ sudo docker ps -a -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
363ed45619ae ubuntu "/bin/bash" 20 minutes ago Exited (0) About a minute ago keen_boyd
4.容器命名
--name 标志
$ sudo docker run --name hiekay_container -i -t ubuntu /bin/bash
root@989f63da27d3:/# exit
exit
$ sudo docker ps -a -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
989f63da27d3 ubuntu "/bin/bash" 26 seconds ago Exited (0) 8 seconds ago hiekay_container
合法的容器名稱符合: [a-zA-Z0-9_·-]
5.重新開機停止的容器
可以通過容器名稱 或則 容器ID
$ sudo docker start hiekay_container
hiekay_container
$ sudo docker start 989f63da27d3
989f63da27d3
6.附着到容器上
docker容器重新啟動的時候 會重新開機一個互動式會話shell,我們可以用 docker attach 重新附着到該容器會話上 , 可通過容器 name 或者 ID 。
$ sudo docker attach hiekay_container
root@989f63da27d3:/#
$ sudo docker attach 989f63da27d3
root@989f63da27d3:/#
7.建立守護式容器
除了互動式運作的容器,大部分是需要建立長期運作的容器, 守護式容器 沒有互動式會話,适合運作應用程式和服務。
執行個體:
$ sudo docker run --name demo -d ubuntu /bin/sh -c "while true; do echo hello world; sleep1; done"
ea6e0fecba4f5185f62e2a46851882572bdb465fccfdac6b27a64ea9ff3cedc9
其中-d參數 是标志讓容器放在背景運作。
其中 指令是讓 運作一個 while 循環 一直列印 hello world ,直到容器或程序停止。
- 可通過 docker ps指令 檢視 正在運作的容器
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ea6e0fecba4f ubuntu "/bin/sh -c 'while t…" 2 minutes ago Up 2 minutes demo
8.檢視容器内部的工作
- docker logs
$ sudo docker logs demo
hello world
hello world
hello world
......
也可以用 -f參數來監控日志
$ sudo docker logs -f demo
也可以用 tail 指令看最後的幾行日志
sudo docker logs --tail 10 demo
或
sudo docker logs --tail 0 -f demo
9.檢視容器内的程序
- docker top
$ sudo docker top demo
UID PID PPID C STIME TTY TIME CMD
root 31469 31448 99 16:11 ? 00:09:46 /bin/sh -c while true; do echo hello world; sleep1; done
10.在容器内運作程序
-
docker exec
兩種類型:背景任務 和 互動式任務
- 背景任務
$ sudo docker exec -d demo touch /etc/new_file1
- 互動式任務
$ sudo docker exec -t -i demo /bin/bash
root@ea6e0fecba4f:/#
11.停止守護式容器
- docker stop name/ID
$ sudo docker stop demo
或
$ sudo docker stop ea6e0fecba4f
- 注意: 也可以通過docker kill 關閉
12.自動重新開機容器
- 自動重新開機标志: --restart
$ sudo docker run --restart=always --name demo -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
-
注意: --restart 被設定為 always ,無論退出代碼是什麼,一直會自動重新開機。
還可以設定為: on-failure 隻有當退出代碼為0的時候才會自動重新開機,也可以傳參數: 5, 重新開機次數。
--restart=on-failure:5
13.深入容器
- docker inspect 擷取更多容器資訊
$ sudo docker inspect demo
//擷取的資訊
[
{
"Id": "ea6e0fecba4f5185f62e2a46851882572bdb465fccfdac6b27a64ea9ff3cedc9",
"Created": "2018-10-29T08:11:49.219017867Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true; do echo hello world; sleep1; done"
],
......
-
可以用 -f 或 --format 标志來標明檢視結果 ,支援完整的Go語言模闆
例子:
檢視容器的運作狀态
$ sudo docker inspect --format='{{.State.Running}}' demo
//傳回
false
檢視容器IP
$ sudo docker inspect --format='{{.NetworkSettings.IPAddress}}' demo
檢視多個容器的資訊
$ sudo docker inspect --format='{{.Name}} {{.State.Running}}' demo demo1
/demo false
/demo1 false
14.删除容器
- docker rm name/ID
$ sudo docker rm demo1
demo1
- 注意:删除之前 必須先關閉
- 删除所有
$ sudo rm 'docker ps -a -q '
解析:docker -a 列出所有容器,-q 傳回ID, 然後傳給 sudo rm ID , 即可删除。
15. 小結
docker 基礎,請多聯系。