一、安装Docker

仓库下载地址:https://download.docker.com/

仓库配置文件:https://download.docker.com/linux/centos/docker-ce.repo

也可以选用清华的镜像

https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

下载后使用vim编辑一下把地址替换为清华大学镜像的地址

vim  docker-ce.repo 
	查找替换	
	:%s@https://download.docker.com/@https://mirrors.tuna.tsinghua.edu.cn/docker-ce/@

安装Docker要求Centos内核版本高于3.10。可以通过uname -r查看当前系统的内核版本,这里使用的是centos7.4版本。

[root@centos7 yum.repos.d]# uname -r
3.10.0-693.el7.x86_64

可以查看所有仓库中所有docker版本,并选择特定版本安装

[root@centos7 yum.repos.d]# yum list docker-ce --showduplicates | sort -r
已加载插件:fastestmirror, langpacks
可安装的软件包
Loading mirror speeds from cached hostfile
docker-ce.x86_64            3:19.03.8-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.7-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.6-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.5-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.4-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.3-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.2-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.1-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.0-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.9-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.8-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.7-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.6-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.5-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.4-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.3-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.2-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.1-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.0-3.el7                     docker-ce-stable
docker-ce.x86_64            18.06.3.ce-3.el7                    docker-ce-stable
docker-ce.x86_64            18.06.2.ce-3.el7                    docker-ce-stable
docker-ce.x86_64            18.06.1.ce-3.el7                    docker-ce-stable
docker-ce.x86_64            18.06.0.ce-3.el7                    docker-ce-stable
docker-ce.x86_64            18.03.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            18.03.0.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.12.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.12.0.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.09.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.09.0.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.06.2.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.06.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.06.0.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.03.3.ce-1.el7                    docker-ce-stable
docker-ce.x86_64            17.03.2.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.03.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.03.0.ce-1.el7.centos             docker-ce-stable

安装Docker,命令:yum install docker-ce-版本号,不选择版本号则默认安装最新版本。

[root@centos7 yum.repos.d]# yum install -y docker-ce

出现报错

docker yml配置文件路径 docker环境配置_nginx


解决办法:

1、下载container-selinux:

wget https://mirrors.aliyun.com/centos/7/extras/x86_64/Packages/container-selinux-2.107-3.el7.noarch.rpm

2、安装container-selinux(使用–nodeps --force跳过依赖检查):

rpm -ivh container-selinux-2.107-3.el7.noarch.rpm --nodeps --force

安装成功后,启动服务。

[root@centos7 app]# systemctl start docker
[root@centos7 app]# systemctl enable docker

查看版本信息

[root@centos7 app]# 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相关配置文件

Docker组件:

docker-ce:
       配置文件:/etc/docker/daemon.json

Docker镜像加速

docker cn
阿里云加速器
中国科技大学
例:vim /etc/docker/daemon.json
	{
	     "registry-mirrors"	: ["https://registry.docker-cn.com"]	
	}
    
    
注册阿里云账号,专用加速器地址获得路径:
    https://cr.console.aliyun.com/#/accelerator
[root@centos7 docker]# vim /etc/docker/daemon.json

{
      "registry-mirrors" : ["https://registry.docker-cn.com"]
}
逻辑:
	Containers:容器,运行时的镜像具有生命周期
	Images:镜像、映像
	Registry:Image Repositories 镜像仓库
	容器的状态:
	created:
	runing:
	paused:
	stopped:
	deleted:

三、docker相关操作

1、docker info
查看当前docker的信息

[root@centos7 docker]# docker info
Client:
 Debug Mode: false

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 19.03.8
 Storage Driver: overlay2
  Backing Filesystem: <unknown>
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
 init version: fec3683
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 3.10.0-693.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 1.781GiB
 Name: centos7.cwj.com
 ID: RK6H:JQZP:EFEH:ZOTJ:CER3:JF72:BZXT:WYFZ:6QEL:EAQP:SFVX:MKW3
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  https://registry.docker-cn.com/
 Live Restore Enabled: false

2、docker search
在Docker Hub中搜索镜像

[root@centos7 docker]# docker search nginx
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
nginx                              Official build of Nginx.                        13152               [OK]                
jwilder/nginx-proxy                Automated Nginx reverse proxy for docker con…   1796                                    [OK]
richarvey/nginx-php-fpm            Container running Nginx + PHP-FPM capable of…   771                                     [OK]
linuxserver/nginx                  An Nginx container, brought to you by LinuxS…   111                                     
bitnami/nginx                      Bitnami nginx Docker Image                      83                                      [OK]
tiangolo/nginx-rtmp                Docker image with Nginx using the nginx-rtmp…   70                                      [OK]
alfg/nginx-rtmp                    NGINX, nginx-rtmp-module and FFmpeg from sou…   58                                      [OK]
jc21/nginx-proxy-manager           Docker container for managing Nginx proxy ho…   57                                      
nginxdemos/hello                   NGINX webserver that serves a simple page co…   48                                      [OK]
jlesage/nginx-proxy-manager        Docker container for Nginx Proxy Manager        42                                      [OK]
nginx/unit                         NGINX Unit is a dynamic web and application …   37                                      
nginx/nginx-ingress                NGINX Ingress Controller for Kubernetes         30                                      
privatebin/nginx-fpm-alpine        PrivateBin running on an Nginx, php-fpm & Al…   24                                      [OK]
schmunk42/nginx-redirect           A very simple container to redirect HTTP tra…   18                                      [OK]
nginxinc/nginx-unprivileged        Unprivileged NGINX Dockerfiles                  14                                      
centos/nginx-18-centos7            Platform for running nginx 1.8 or building n…   13                                      
centos/nginx-112-centos7           Platform for running nginx 1.12 or building …   13                                      
raulr/nginx-wordpress              Nginx front-end for the official wordpress:f…   12                                      [OK]
nginx/nginx-prometheus-exporter    NGINX Prometheus Exporter                       12                                      
sophos/nginx-vts-exporter          Simple server that scrapes Nginx vts stats a…   7                                       [OK]
mailu/nginx                        Mailu nginx frontend                            6                                       [OK]
bitnami/nginx-ingress-controller   Bitnami Docker Image for NGINX Ingress Contr…   5                                       [OK]
wodby/nginx                        Generic nginx                                   1                                       [OK]
ansibleplaybookbundle/nginx-apb    An APB to deploy NGINX                          1                                       [OK]
centos/nginx-110-centos7           Platform for running nginx 1.10 or building …   0

3、docker pull 等价于docker image pull
从docker registry中获取镜像

[root@centos7 docker]# docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
e2334dd9fee4: Pull complete 
Digest: sha256:a8cf7ff6367c2afa2a90acd081b484cbded349a7076e7bdf37a05279f276bc12
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest
[root@centos7 docker]# docker pull nginx:1.14-alpine
1.14-alpine: Pulling from library/nginx
bdf0201b3a05: Pull complete 
3d0a573c81ed: Pull complete 
8129faeb2eb6: Pull complete 
3dc99f571daf: Pull complete 
Digest: sha256:485b610fefec7ff6c463ced9623314a04ed67e3945b9c08d7e53a47f6d108dc7
Status: Downloaded newer image for nginx:1.14-alpine
docker.io/library/nginx:1.14-alpine

4、docker image ls
列出当前服务器上的镜像文件。

[root@centos7 docker]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              be5888e67be6        3 weeks ago         1.22MB
nginx               1.14-alpine         8a2fb25a19f5        13 months ago       16MB

5、docker network ls
列出docker本地的网络类型

[root@centos7 app]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
6d86f805cb88        bridge              bridge              local
4c484f1fad68        host                host                local
08e0be372dd3        none                null                local
[root@centos7 app]# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:06:c0:3d:08  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

6、docker ps等价于docker containers ls
列出处于运行状态的容器

[root@centos7 ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
c11c79b63651        busybox             "sh"                10 minutes ago      Up 10 minutes                           busy1

7、docker run
在新容器中运行命令,不指定命令则运行容器默认的命令。
运行busybox容器,该容器默认运行一个shell

[root@centos7 app]# docker run --name busy1 -it busybox
/ # 
/ # ls /
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # ps
PID   USER     TIME  COMMAND
    1 root      0:00 sh
    7 root      0:00 ps

在busybox中运行一个web服务

/ # httpd -h
httpd: option requires an argument -- h
BusyBox v1.31.1 (2020-04-14 01:09:51 UTC) multi-call binary.

Usage: httpd [-ifv[v]] [-c CONFFILE] [-p [IP:]PORT] [-u USER[:GRP]] [-r REALM] [-h HOME]
or httpd -d/-e/-m STRING

Listen for incoming HTTP requests

	-i		Inetd mode
	-f		Don't daemonize
	-v[v]		Verbose
	-p [IP:]PORT	Bind to IP:PORT (default *:80)
	-u USER[:GRP]	Set uid/gid after binding to port
	-r REALM	Authentication Realm for Basic Authentication
	-h HOME		Home directory (default .)
	-c FILE		Configuration file (default {/etc,HOME}/httpd.conf)
	-m STRING	MD5 crypt STRING
	-e STRING	HTML encode STRING
	-d STRING	URL decode STRING
/ # mkdir -p /data/html
/ # vi /data/html/index.html
/ # cat /data/html/index.html 
<h1>Busybox httpd server</h1>
/ # httpd -f -h /data/html/

使用docker inspect NAME 查看指定容器的详细信息。

[root@centos7 ~]# docker inspect busy1
...
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "6d86f805cb88b5f2b58935668b9c167eeeec96954de703198ada35fa36ffb0ef",
                    "EndpointID": "7d96146e29bd955afa0c98906c573dbd857fa7e3412f676eae7ba90107fcafd4",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]

在容器外部使用curl命令访问测试。

[root@centos7 ~]# curl 172.17.0.2
<h1>Busybox httpd server</h1>

运行nginx容器

[root@centos7 app]# docker run --name web1 -d nginx:1.14-alpine ##-d表示在后台运行容器并打印容器ID
47ae69d98ad0bb55f920c8f2535ab31bce2fcdc51c4545f84ad240c323ccfbaf
[root@centos7 app]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
47ae69d98ad0        nginx:1.14-alpine   "nginx -g 'daemon of…"   4 seconds ago       Up 3 seconds        80/tcp              web1

nginx -g daemon off表示nginx进程在容器中运行于前台,在docker中必须有一个运行于前台的进程,否则容器将终止。

[root@centos7 ~]# curl 172.17.0.3
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

8、docker start
运行一个或多个处于停止状态的容器

[root@centos7 app]# docker start -i -a busy1
/ # ls
bin   data  dev   etc   home  proc  root  sys   tmp   usr   var
/ #

9、docker stop和docker kill
这两条命令都是用于停止正在运行的容器,docker stop是属于正常终止,相当于发送15信号,docker kill是强制终止,相当于发送9信号。

[root@centos7 ~]# docker stop busy1
busy1
[root@centos7 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
c11c79b63651        busybox             "sh"                38 minutes ago      Exited (137) 41 seconds ago                       busy1
[root@centos7 ~]# docker kill busy1
busy1
[root@centos7 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES
c11c79b63651        busybox             "sh"                39 minutes ago      Exited (137) 5 seconds ago                       busy1

10、删除容器

# [root@centos7 app]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
c11c79b63651        busybox             "sh"                40 minutes ago      Exited (137) 38 seconds ago                       busy1
[root@centos7 app]# docker rm busy1
busy1
[root@centos7 app]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

11、docker exec
在运行的容器中执行命令,如:可以通过运行一个shell进入到运行的web1容器中,并查看其信息。

[root@centos7 ~]# docker exec -it web1 /bin/sh
/ # ls
bin    dev    etc    home   lib    media  mnt    opt    proc   root   run    sbin   srv    sys    tmp    usr    var
/ # ps
PID   USER     TIME  COMMAND
    1 root      0:00 nginx: master process nginx -g daemon off;
    6 nginx     0:00 nginx: worker process
    7 root      0:00 /bin/sh
   13 root      0:00 ps

12、docker logs
获取某个容器的日志信息。

[root@centos7 ~]# docker logs web1
172.17.0.1 - - [11/May/2020:13:08:17 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
172.17.0.1 - - [11/May/2020:13:30:27 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"