容器與容器雲——Docker容器基本概念

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 								#刪除容器
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章