Docker 基本概念
- 什麼是Docker?
Docker是一個輕量級的“虛擬機”,容器完全使用沙箱機制,相互之間不會有任何接口。是Linux容器裏運行應用的開源工具。
- Docker與虛擬機的區別
- Docker主要構成
- Docker Client 客戶端
- Docker Daemon 守護進程
- Docker Images 鏡像
- Docker Container 容器
- Docker Registry 倉庫
- Docker運作流程
Client ——> Daemon ——> Images (or Registry ——> Images)——> Containers
Client客戶端下達指令,執行操作,下達到daemon守護進程,守護進程收到之後,如果想構建images鏡像,守護進程直接把當前的容器環境製作成images鏡像,images鏡像不僅可以從當前的環境製作images鏡像,也可以從指定的一個registry倉庫中進行下載(也稱爲拉取),registry倉庫也分爲公共的官方倉庫(便於全球使用docker的用戶使用加載),和私有搭建的倉庫。利用不同的imagers鏡像直接生成不同的 containers容器。
- Docker的核心概念
Docker Images 鏡像
Docker Container 容器
Docker Registry 倉庫
- Docker 環境安裝
首先關閉防火牆
systemctl stop firewalld #停止防火牆
systemctl disable firewalld #關閉防火牆自啓動
setenforce 0 #關閉核心防護
#永久關閉核心防護功能
vim /etc/selinux/config
#把第7行的enforcing修改成disabled
#用正則修改
sed -i "7s/enforcing/disabled" /etc/selinux/config | cat /etc/selinux/config
- 安裝部署Docker的環境包
yum install -y yum-utils device-mapper-persistent-data lvm2
#這裏用的是阿里雲鏡像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#在阿里雲的yum源中下載decker-ce(社區版)repo配置文件
#下載完repo配置文件之後,才能安裝Docker-ce
#安裝Docke-CE
yum install -y docker-ce
systemctl start docker.service #打開docker服務
systemctl enable docker.service #設置docker開機自啓動服務
Docker 鏡像操作
- 鏡像加速
- 下列的"http://…"裏的鏡像加速地址可以通過阿里雲官方服務器申請得到 https://help.aliyun.com/document_detail/60750.html
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://..."]
}
EOF
systemctl daemon-reload #重新加載
systemctl restart docker #重新啓動docker服務
網絡優化
vim /etc/sysctl.conf
net.ipv4.ip_forward=1 #開啓數據包轉發功能
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf #開啓數據包轉發功能
service network restart #重啓網絡服務
systemctl restart docker #重啓docker
鏡像常用命令
witch docker #查找存放路徑
[root@192 ~]# which docker
/usr/bin/docker
docker version #查看版本
Client: Docker Engine - Community
Version: 19.03.8
API version: 1.40
Go version: go1.12.17
Git commit: afacb8b
Built: Wed Mar 11 01:27:04 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.8
API version: 1.40 (minimum version 1.12)
Go version: go1.12.17
Git commit: afacb8b
Built: Wed Mar 11 01:25:42 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.13
GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
docker search 名稱 #搜索鏡像
[root@192 docker]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 12976 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1773 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 764 [OK]
linuxserver/nginx An Nginx container, brought to you by LinuxS… 105
bitnami/nginx Bitnami nginx Docker Image 82 [OK]
tiangolo/nginx-rtmp Docker image with Nginx using the nginx-rtmp… 68 [OK]
jc21/nginx-proxy-manager Docker container for managing Nginx proxy ho… 51
......內容省略
docker pull 名稱 #下載鏡像
[root@192 docker]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
c499e6d256d6: Pull complete
74cda408e262: Pull complete
ffadbd415ab7: Pull complete
Digest: sha256:282530fcb7cd19f3848c7b611043f82ae4be3781cb00105a1d593d7e6286b596
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
docker images #查看已下載鏡像
[root@192 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest ed21b7a8aee9 2 weeks ago 127MB
docker inspect 鏡像ID #獲取鏡像信息
[root@192 overlay2]# docker inspect ed21b7a8aee9
[
{
"Id": "sha256:ed21b7a8aee9cc677df6d7f38a641fa0e3c05f65592c592c9f28c42b3dd89291",
"RepoTags": [
"nginx:latest"
],
"RepoDigests": [
"nginx@sha256:282530fcb7cd19f3848c7b611043f82ae4be3781cb00105a1d593d7e6286b596"
],
"Parent": "",
"Comment": "",
"Created": "2020-03-31T03:19:30.487069362Z",
"Container": "5c86b143cf5caec0aed5c331922c243f00600152ec0e9ecbe8531771562e72b8",
"ContainerConfig": {
"Hostname": "5c86b143cf5c",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"80/tcp": {}
},
......內容省略
docker tag 鏡像名稱:鏡像標籤 鏡像名稱:鏡像標籤 #添加鏡像標籤
[root@192 overlay2]# docker tag nginx:latest nginx:web
[root@192 overlay2]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest ed21b7a8aee9 2 weeks ago 127MB
nginx web ed21b7a8aee9 2 weeks ago 127MB
docker rmi 鏡像名稱:鏡像標籤 #刪除鏡像
[root@192 overlay2]# docker rmi nginx:web
Untagged: nginx:web
[root@192 overlay2]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest ed21b7a8aee9 2 weeks ago 127MB
docker saved -o 文件名 鏡像名 #鏡像輸出
[root@192 overlay2]# mkdir /abc
[root@192 overlay2]# cd /abc
[root@192 abc]# ls
[root@192 abc]# docker save -o nginx nginx:latest
[root@192 abc]# ls
nginx
[root@192 abc]# ls -lh nginx
-rw-------. 1 root root 125M 4月 15 07:48 nginx
docker load < 文件名 #鏡像導入
[root@192 abc]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest ed21b7a8aee9 2 weeks ago 127MB
[root@192 abc]# ls
nginx
[root@192 abc]# ls -lh nginx
-rw-------. 1 root root 125M 4月 18 10:24 nginx
[root@192 abc]# docker rmi ed21b7a8aee9
Untagged: nginx:latest
Untagged: nginx@sha256:282530fcb7cd19f3848c7b611043f82ae4be3781cb00105a1d593d7e6286b596
Deleted: sha256:ed21b7a8aee9cc677df6d7f38a641fa0e3c05f65592c592c9f28c42b3dd89291
Deleted: sha256:8a305f371a6c3c445a1dfc500c1364743868a269ab8cdaf95902692e82168352
Deleted: sha256:d079ef06ec1f10a8050887365f9a940b39547ba6bcc46b16a463e740984f3223
Deleted: sha256:c3a984abe8a88059915bb6c7a1d249fd1ccc16d931334ac8816540b0eb686b45
[root@192 abc]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@192 abc]# docker load < nginx
c3a984abe8a8: Loading layer 72.48MB/72.48MB
99134ec7f247: Loading layer 58.11MB/58.11MB
d37eecb5b769: Loading layer 3.584kB/3.584kB
Loaded image: nginx:latest
[root@192 abc]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest ed21b7a8aee9 2 weeks ago 127MB
docker login #登錄
docker push #上傳
- 容器常用命令
docker create -it 鏡像名稱 終端 #容器創建
- -i 讓容器的標準輸入保持打開
- -t 讓docker分配一個僞終端
[root@192 abc]# docker create -it nginx:latest /bin/bash
b64fae63823860866a2f24ef8dadfd6ccadb19dda42568b14d8c2e066f928819
docker ps -a #查看容器狀態
[root@192 abc]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b64fae638238 nginx:latest "/bin/bash" 4 seconds ago Created vibrant_swartz
docker start 容器ID #啓動容器
[root@192 abc]# docker start b64fae638238
b64fae638238
查看狀態爲up
[root@192 abc]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b64fae638238 nginx:latest "/bin/bash" 3 minutes ago Up 7 seconds 80/tcp vibrant_swartz
啓動執行命令查看系統根目錄
docker run 鏡像 -c 所需要的指令
- -c command執行指令
docker run的執行過程包括了pull下載、create創建、start啓動
如果有鏡像,不會下載,直接加載這個鏡像;如果沒有鏡像,會找倉庫下載這個鏡像
[root@192 abc]# docker run centos:7 /usr/bin/bash -c ls /
Unable to find image 'centos:7' locally
7: Pulling from library/centos
ab5ef0e58194: Already exists
Digest: sha256:4a701376d03f6b39b8c2a8f4a8e499441b0d567f9ab9d58e4991de4472fb813c
Status: Downloaded newer image for centos:7
anaconda-post.log
bin
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
[root@192 abc]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest e791337790a6 46 hours ago 127MB
centos 7 5e35e350aded 5 months ago 203MB
[root@192 abc]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest e791337790a6 46 hours ago 127MB
centos 7 5e35e350aded 5 months ago 203MB
[root@192 abc]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f6a800a8acc9 centos:7 "/usr/bin/bash -c ls…" About a minute ago Exited (0) About a minute ago busy_ardinghelli
b64fae638238 nginx:latest "/bin/bash" 11 minutes ago Up 8 minutes 80/tcp vibrant_swartz
docker stop 容器ID #終止運行
[root@192 abc]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f6a800a8acc9 centos:7 "/usr/bin/bash -c ls…" About a minute ago Exited (0) About a minute ago busy_ardinghelli
b64fae638238 nginx:latest "/bin/bash" 11 minutes ago Up 8 minutes 80/tcp vibrant_swartz
[root@192 abc]# docker stop b64fae638238
b64fae638238
[root@192 abc]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES
f6a800a8acc9 centos:7 "/usr/bin/bash -c ls…" 3 minutes ago Exited (0) 3 minut busy_ardinghelli
b64fae638238 nginx:latest "/bin/bash" 13 minutes ago Exited (0) 7 secon vibrant_swartz
docker run -d 鏡像名稱 終端 -c 執行命令 #持續在後臺執行
[root@192 abc]# docker run -d centos:7 /bin/bash -c "while true;do echo hello;done"
425906050c12ccd3a3bfd4f43add8b11de4f8238c14bc5ee2da0aa8937e6efb0
[root@192 abc]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
425906050c12 centos:7 "/bin/bash -c 'while…" 5 seconds ago Up 4 seconds eager_payne
第一種進入容器的方式
docker run -it 容器名稱
[root@192 abc]# docker run -ti nginx:latest /bin/bash
root@fcd326a8e57a:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
第二種進入容器的方式
docker start 容器ID
當容器處於up狀態的時候用exec進入
docker exec -it 容器ID 終端
[root@192 abc]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b64fae638238 nginx:latest "/bin/bash" 18 minutes ago Exited (0) 5 minutes ago vibrant_swartz
[root@192 abc]# docker start b64fae638238
b64fae638238
[root@192 abc]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b64fae638238 nginx:latest "/bin/bash" 19 minutes ago Up 4 seconds 80/tcp vibrant_swartz
[root@192 abc]# docker exec -it b64fae638238 /bin/bash
root@b64fae638238:/#
root@b64fae638238:/# exit
exit
[root@192 abc]#
docker export 容器ID > 文件名 #容器導出
[root@192 abc]# ls
nginx
[root@192 abc]# docker export b64fae638238 > nginx_c
[root@192 abc]# ls
nginx nginx_c
docker rm 容器ID #刪除容器
[root@192 abc]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c875a3516d3e nginx:latest "/bin/bash" 12 minutes ago Exited (0) 12 minutes ago heuristic_jennings
425906050c12 centos:7 "/bin/bash -c 'while…" 14 minutes ago Exited (137) 13 minutes ago eager_payne
f6a800a8acc9 centos:7 "/usr/bin/bash -c ls…" 20 minutes ago Exited (0) 20 minutes ago busy_ardinghelli
b64fae638238 nginx:latest "/bin/bash" 29 minutes ago Up 11 minutes 80/tcp vibrant_swartz
[root@192 abc]# docker rm 425906050c12
425906050c12
[root@192 abc]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c875a3516d3e nginx:latest "/bin/bash" 12 minutes ago Exited (0) 12 minutes ago heuristic_jennings
f6a800a8acc9 centos:7 "/usr/bin/bash -c ls…" 20 minutes ago Exited (0) 20 minutes ago busy_ardinghelli
b64fae638238 nginx:latest "/bin/bash" 30 minutes ago Up 11 minutes 80/tcp vibrant_swartz
批量刪除容器
docker ps -a | awk ‘{print "docker rm "$1}’ | bash
[root@192 abc]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c875a3516d3e nginx:latest "/bin/bash" 16 minutes ago Exited (0) 16 minutes ago heuristic_jennings
f6a800a8acc9 centos:7 "/usr/bin/bash -c ls…" 24 minutes ago Exited (0) 24 minutes ago busy_ardinghelli
b64fae638238 nginx:latest "/bin/bash" 34 minutes ago Up 15 minutes 80/tcp vibrant_swartz
[root@192 abc]# docker ps -a | awk '{print "docker rm "$1}' | bash
Error: No such container: CONTAINER
c875a3516d3e
f6a800a8acc9
Error response from daemon: You cannot remove a running container b64fae63823860866a2f24ef8dadfd6ccadb19dda42568b14d8c2e066f928819. Stop the container before attempting removal or force remove
[root@192 abc]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b64fae638238 nginx:latest "/bin/bash" 35 minutes ago Up 16 minutes 80/tcp vibrant_swartz
總結
鏡像常用命令
witch docker #查找存放路徑
docker version #查看版本
docker search 名稱 #搜索鏡像
docker pull 名稱 #下載鏡像
docker images #查看已下載鏡像
docker inspect 鏡像ID #獲取鏡像信息
docker tag 鏡像名稱:鏡像標籤 鏡像名稱:鏡像標籤 #添加鏡像標籤
docker rmi 鏡像名稱:鏡像標籤 #刪除鏡像
docker saved -o 文件名 鏡像名 #鏡像輸出
docker load < 文件名 #鏡像導入
docker login #登錄
docker push #上傳
容器常用命令
docker create -it 鏡像名稱 終端 #容器創建
docker ps -a #查看容器狀態
docker start 容器ID #啓動容器
docker run 鏡像 -c 所需要的指令
docker stop 容器ID #終止運行
docker run -d 鏡像名稱 終端 -c 執行命令 #持續在後臺執行
第一種進入容器的方式
docker run -it 容器名稱
第二種進入容器的方式
docker start 容器ID
當容器處於up狀態的時候用exec進入
docker exec -it 容器ID 終端
docker export 容器ID > 文件名 #容器導出
docker rm 容器ID #刪除容器