1:docker 安裝時 linux內核版本太低問題node
使用uname -a 能夠查看linux內核的版本號,例如ubuntu會輸出相似的內容:mysql
root@ubuntu:~# uname -a
Linux ubuntu 4.4.0-142-generic #168-Ubuntu SMP Wed Jan 16 21:00:45 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
因爲docker的安裝條件包括了內核的條件限制:低於3.8的運行docker可能會有問題linux
下面來看一下如何升級linux內核sql
apt-get update
spt-get install linux-headers-版本號-generic等待安裝完畢
而後是用update-grub啓動加載器加載新內核。docker
最後使用reboot來重啓宿主機啓用新的內核。shell
驗證如下使用uname -a看看內核版本有沒有變化json
2:驗證docker是否已經準備就緒ubuntu
docker info
使用docker可執行程序的info命令,若是docker準備就緒的話,會輸出已運行的容器數量,安裝的鏡像數量,docker使用的執行驅動和存儲驅動和docker環境的配置信息。vim
3:docker 是一個基於 c/s架構設計的,既能作客戶端也能作服務器。作客戶端時,docker程序向docker守護進程發送請求,而後在度i返回的請求結果驚醒處理。bash
4:運行一個容器
docker run -i -t ubuntu /bin/bash
下面來解釋如下各個參數的意思:
docker run 這是docker的一條命令,
-i 標誌保證容器中STDIN時開啓的,持久的表中輸入時交互式shell的半邊天
-t 告訴docker爲要建立的容器分配一個僞tty終端。另外半邊天。
ubunutu 是一個鏡像。
/bin/bash 告訴docker容器運行一個shell命令。
運行完上面的命令後就會i進入到ubuntu容器中,docker會給容器分配一個惟一id:dae666724601
root@ubuntu:~# docker run -i -t ubuntu /bin/bash
root@dae666724601:/#
root@dae666724601:/# hostname
dae666724601
root@dae666724601:/# 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.4 dae666724601
root@dae666724601:/# apt-get update && apt-get install vim
root@dae666724601:/# exit
exit
這條命令會結束容器的運行。可使用蝦米那一條命令來看一下容器是否已經結束運行了
root@ubuntu:~# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dae666724601 ubuntu "/bin/bash" 18 minutes ago Exited (0) 6 seconds ago heuristic_poincare
-l參數是列出最後一次運行的容器,親測只包括已經中止的。
-a參數是查看當前系統中容器的列表(已經中止的和正在運行的),來看一下二者的輸出區別:
root@ubuntu:~# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dae666724601 ubuntu "/bin/bash" 18 minutes ago Exited (0) 6 seconds ago heuristic_poincare
root@ubuntu:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dae666724601 ubuntu "/bin/bash" 22 minutes ago Exited (0) 3 minutes ago heuristic_poincare
8b7fa227bca2 mysql "docker-entrypoint.s…" 17 hours ago Up 17 hours 33060/tcp, 0.0.0.0:3307->3306/tcp second_mysql
df6e780fb24a mysql "docker-entrypoint.s…" 17 hours ago Up 17 hours 0.0.0.0:3306->3306/tcp, 33060/tcp first-mysql
從上面的輸出結果能夠看出來,NAMES這一列,系統給自動分配了一個隨機的名字。下面來講一下容器的命名
root@ubuntu:~# docker ps -al
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd1ee14b8f14 ubuntu "/bin/bash" 19 seconds ago Exited (0) 5 seconds ago smeon_ubuntu
細心的同窗應該會發現容器的惟一id和名字都變了。是的,咱們在使用run命令的時候,docker是會進行建立和運行兩步操做的,可是用的是同一個鏡像。因此使用docker ps -a 會看到有兩個ubuntu容器已經中止了。
root@ubuntu:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd1ee14b8f14 ubuntu "/bin/bash" 27 seconds ago Exited (0) 14 seconds ago smeon_ubuntu
dae666724601 ubuntu "/bin/bash" 31 minutes ago Exited (0) 13 minutes ago heuristic_poincare
8b7fa227bca2 mysql "docker-entrypoint.s…" 17 hours ago Up 17 hours 33060/tcp, 0.0.0.0:3307->3306/tcp second_mysql
df6e780fb24a mysql "docker-entrypoint.s…" 17 hours ago Up 17 hours 0.0.0.0:3306->3306/tcp, 33060/tcp first-mysql
那若是像複用以前已經中止的容器該怎麼辦呢?這就須要使用另外一個命令。
root@ubuntu:~# docker start smeon_ubuntu
smeon_ubuntu
root@ubuntu:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd1ee14b8f14 ubuntu "/bin/bash" 6 minutes ago Up 50 seconds smeon_ubuntu
dae666724601 ubuntu "/bin/bash" 37 minutes ago Exited (0) 19 minutes ago heuristic_poincare
8b7fa227bca2 mysql "docker-entrypoint.s…" 17 hours ago Up 17 hours 33060/tcp, 0.0.0.0:3307->3306/tcp second_mysql
df6e780fb24a mysql "docker-entrypoint.s…" 17 hours ago Up 17 hours 0.0.0.0:3306->3306/tcp, 33060/tcp first-mysql
能夠看到以前中止的指定名字的容器已經啓動了。另外兩種方式能夠本身去試一下。另外還可使用docker restart 容器名字/惟一段id/惟一長id 來重啓容器。
root@ubuntu:~# docker stop smeon_ubuntu
smeon_ubuntu
root@ubuntu:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd1ee14b8f14 ubuntu "/bin/bash" 9 minutes ago Exited (0) 5 seconds ago smeon_ubuntu
dae666724601 ubuntu "/bin/bash" 40 minutes ago Exited (0) 22 minutes ago heuristic_poincare
8b7fa227bca2 mysql "docker-entrypoint.s…" 17 hours ago Up 17 hours 33060/tcp, 0.0.0.0:3307->3306/tcp second_mysql
df6e780fb24a mysql "docker-entrypoint.s…" 17 hours ago Up 17 hours 0.0.0.0:3306->3306/tcp, 33060/tcp first-mysql
root@ubuntu:~# docker attach heuristic_poincare
root@dae666724601:/#
這裏須要注意的是:若是容器時中止的,attach 的時候會失敗。
root@ubuntu:~# docker run --name daemon_ubuntu -d ubuntu /bin/bash -c "while true; do echo hello world;sleep 1; done"
6b2bd21daf3362e1b7cc75ede26eaf691f1d09926fa3fb5f99c1309a01f69f69
-d 參數是一個後臺運行的參數
-c 參數是一直循環輸出hello world,直到容器或進程中止。
問題來了:怎麼能看到上一條命令的輸出呢?這須要下一條命令:
root@ubuntu:~# docker logs daemon_ubuntu
hello world
hello world
hello world
hello world
hello world
...
若是不想查看全部日誌,只須要追蹤最新的logs日誌,有沒有向tail -f 同樣的參數呢?大難是確定的。
docker logs --tail 10 -f daemon_ubunt 使用參數 --tail 便可以查看最近10條的日誌。
root@ubuntu:~# docker top daemon_ubuntu
UID PID PPID C STIME TTY TIME CMD
root 13148 13131 0 10:13 ? 00:00:00 /bin/bash -c while true; do echo hello world;sleep 1; done
root 13996 13148 0 10:21 ? 00:00:00 sleep 1
root@ubuntu:~# docker exec -d smeon_ubuntu touch /home/config_file.conf
root@ubuntu:~# docker restart smeon_ubuntu
smeon_ubuntu
root@ubuntu:~# docker attach smeon_ubuntu
root@dd1ee14b8f14:/# ls
bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
root@dd1ee14b8f14:/# cd home/
root@dd1ee14b8f14:/home# ls
config_file.conf
-d 參數 代表要運行一個後臺進程
-d以後是指明容器的名字,以及須要執行的命令。這裏建立一個空的配置文件。
經過docker exec 命令能夠在正在運行的容器中進行維護,監控和管理任務。
再舉一個例子:在start 或restart的一個容器的時候不會進入到對應的容器內。也就是不會進入到交互式界面,這時候可使用docker exec 來進入shell交互式界面。
root@ubuntu:~# docker exec -i -t smeon_ubuntu /bin/bash
root@dd1ee14b8f14:/#
root@ubuntu:~# docker run --restart=always --name daemon_ubuntu -d ubuntu /bin/bash -c "while true; echo hello world; sleep 1 ; done"
docker: Error response from daemon: Conflict. The container name "/daemon_ubuntu" is already in use by container "6b2bd21daf3362e1b7cc75ede26eaf691f1d09926fa3fb5f99c1309a01f69f69". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.
注意這個--resatrt參數是隻有run 命令纔有的,start 和restart沒有該參數。run 會建立新的容器。
root@ubuntu:~# docker inspect daemon_ubuntu
[
{
"Id": "6b2bd21daf3362e1b7cc75ede26eaf691f1d09926fa3fb5f99c1309a01f69f69",
"Created": "2020-05-28T02:13:05.496480088Z",
"Path": "/bin/bash",
"Args": [
"-c",
"while true; do echo hello world;sleep 1; done"
],
"State": {
"Status": "exited",
"Running": false,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 0,
"ExitCode": 137,
"Error": "",
"StartedAt": "2020-05-28T02:22:28.858219855Z",
"FinishedAt": "2020-05-28T02:52:01.914573489Z"
},
"Image": "sha256:1d622ef86b138c7e96d4f797bf5e4baca3249f030c575b9337638594f2b63f01",
"ResolvConfPath": "/var/lib/docker/containers/6b2bd21daf3362e1b7cc75ede26eaf691f1d09926fa3fb5f99c1309a01f69f69/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/6b2bd21daf3362e1b7cc75ede26eaf691f1d09926fa3fb5f99c1309a01f69f69/hostname",
"HostsPath": "/var/lib/docker/containers/6b2bd21daf3362e1b7cc75ede26eaf691f1d09926fa3fb5f99c1309a01f69f69/hosts",
"LogPath": "/var/lib/docker/containers/6b2bd21daf3362e1b7cc75ede26eaf691f1d09926fa3fb5f99c1309a01f69f69/6b2bd21daf3362e1b7cc75ede26eaf691f1d09926fa3fb5f99c1309a01f69f69-json.log",
"Name": "/daemon_ubuntu",
...
}
]
inspect命令返回的參數比較多,能夠經過--format參數來輸出指定的配置信息。例如:
root@ubuntu:~# docker inspect --format='{{.State.Status}}' daemon_ubuntu
exited
root@ubuntu:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6b2bd21daf33 ubuntu "/bin/bash -c 'while…" 45 minutes ago Exited (137) 6 minutes ago daemon_ubuntu
dd1ee14b8f14 ubuntu "/bin/bash" About an hour ago Up 26 minutes smeon_ubuntu
dae666724601 ubuntu "/bin/bash" 2 hours ago Exited (0) 53 minutes ago heuristic_poincare
8b7fa227bca2 mysql "docker-entrypoint.s…" 18 hours ago Up 18 hours 33060/tcp, 0.0.0.0:3307->3306/tcp second_mysql
df6e780fb24a mysql "docker-entrypoint.s…" 18 hours ago Up 18 hours 0.0.0.0:3306->3306/tcp, 33060/tcp first-mysql
root@ubuntu:~# docker rm heuristic_poincare
heuristic_poincare
root@ubuntu:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6b2bd21daf33 ubuntu "/bin/bash -c 'while…" 46 minutes ago Exited (137) 7 minutes ago daemon_ubuntu
dd1ee14b8f14 ubuntu "/bin/bash" About an hour ago Up 26 minutes smeon_ubuntu
8b7fa227bca2 mysql "docker-entrypoint.s…" 18 hours ago Up 18 hours 33060/tcp, 0.0.0.0:3307->3306/tcp second_mysql
df6e780fb24a mysql "docker-entrypoint.s…" 18 hours ago Up 18 hours 0.0.0.0:3306->3306/tcp, 33060/tcp first-mysql
root@ubuntu:~#
各位至此,docker的入門基本已經結束,歡迎收藏+推薦