docker的基础应用

什么是docker

docker中的容器:

  • lxc --> libcontainer --> runC

OCI&OCF

OCI

Open Container-initiative

  • 由Linux基金会主导于2015年6月创立
  • 旨在围绕容器格式和运行时制定一个开放的工业化标准
  • contains two specifications
    • the Runtime Specification(runtime-spec)
    • the Image Specification(image-spec)

OCF

OCF

开源的容器格式(Open Container Format)

runC 是一个命令行工具,运行容器记录的一个标准

  • 容器是以runC为子进程的方式启动,并且可以被其他的系统引用,不需要启动为守护模式进程
  • runC 可以构建我们的容器,并且可以被数以百万的存储引擎使用

docker提供了一个专门容纳容器镜像的站点:https://hub.docker.com

docker架构

  • 此图片中的三个大框从左到右为“客户端”“dockers主机”“仓库”(仓库位置可以是本地的,也可以是官方的)
  • 客户端:任意一台有docker命令的主机都为客户端
  • docker主机:安装了docker服务的主机
  • 客户端和docker主机可以在一台主机里运行,仓库可以在另外一台主机运行
  • 客户端里的docker命令交给docker主机的守护进程/服务进行镜像交互
  • lmages镜像里如果有本地镜像不用执行docker pull命令,如果没有就执行docker pull命令从仓库里的镜像拉到本地里来,再用docker run命令在本地启动成Containers容器
  • 每一个container容器都是运行在docker server(宿主机)上的,每一个container容器都是隔离的、独立的
  • 每一个container容器相当于一个Linux操作系统,每一个container容器都有自己的ip地址,所以可以在不同的container上设置相同的端口号

docker镜像与镜像仓库

为什么镜像仓库名字是Registry而不是repository?在docker中仓库的名字是以应用的名称取名的。

镜像是静态的,而容器是动态的,容器有其生命周期,镜像与容器的关系类似于程序与进程的关系。镜像类似于文件系统中的程序文件,而容器则类似于将一个程序运行起来的状态,也即进程。所以容器是可以删除的,容器被删除后其镜像是不会被删除的。

Docker对象

当您使用docker时,您可以创建和使用镜像、容器、网络、存储卷、插件和其他对象。

  • 镜像
    • 一个镜像是只读的模板,是用来创建docker容器的
    • 经常情况, 一个镜像是基于另外一个镜像生成的,加上一些特定的内同
    • 您可以创建您自己的镜像,也可以使用别人在网站上传的镜像
  • 容器
    • 容器是一个用镜像运行的实例
    • 您可以使用命令行模式或者API进行创建,运行,停止,移动,删除容器
    • 您可以将容器连接到一个或多个网络,将存储连接到容器,甚至可以基于其当前状态创建新映像。

安装及使用docker

Docker安装

进入目录

[root@Raygussie ~]# cd /etc/yum.repos.d/

下载

[root@Raygussie yum.repos.d]# curl -o docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1919  100  1919    0     0   1048      0  0:00:01  0:00:01 --:--:--  1048
[root@Raygussie yum.repos.d]# sed -i 's@https://download.docker.com@https://mirrors.tuna.tsinghua.edu.cn/docker-ce@g' docker-ce.repo
[root@Raygussie yum.repos.d]# ls
docker-ce.repo  redhat.repo
[root@Raygussie yum.repos.d]# 

清理缓存

[root@Raygussie ~]# yum clean all
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
0 files removed

搜索

[root@Raygussie ~]# yum list all|grep docker
containerd.io.x86_64                          1.4.3-3.1.el8                     ocker-ce-stable
docker-ce.x86_64                              3:20.10.3-3.el8                   ocker-ce-stable
docker-ce-cli.x86_64                          1:20.10.3-3.el8                   ocker-ce-stable
docker-ce-rootless-extras.x86_64              20.10.3-3.el8                     ocker-ce-stable

安装docker-ce

[root@Raygussie yum.repos.d]# yum -y install docker-ce
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Docker CE Stable - x86_64                         2.1 kB/s | 3.5 kB     00:01    
Dependencies resolved.
==================================================================================
 Package            Arch   Version                         Repository        Size
==================================================================================
Installing:
 docker-ce          x86_64 3:20.10.3-3.el8                 docker-ce-stable  27 M
Upgrading:
 audit              x86_64 3.0-0.17.20191104git1c2f876.el8 base             254 k
。。。。。。
Enabling module streams:
 container-tools           rhel8                                                 

Transaction Summary
=========================================
Install  17 Packages
Upgrade  10 Packages
。。。。。。
(24/27): selinux-policy-3.14.3-54.el8_3.2.noarch. 729 kB/s | 622 kB     00:00    
(25/27): selinux-policy-targeted-3.14.3-54.el8_3. 888 kB/s |  15 MB     00:17    
(26/27): docker-ce-20.10.3-3.el8.x86_64.rpm       145 kB/s |  27 MB     03:07    
(27/27): docker-ce-cli-20.10.3-3.el8.x86_64.rpm   175 kB/s |  33 MB     03:14    
-------------------------------------------------------------------------
Total                                             630 kB/s | 119 MB     03:14     
warning: /var/cache/dnf/docker-ce-stable-fa9dc42ab4cec2f4/packages/containerd.io-1.4.3-3.1.el8.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 621e9f35: NOKEY
Docker CE Stable - x86_64                         1.1 kB/s | 1.6 kB     00:01    
Importing GPG key 0x621E9F35:
 Userid     : "Docker Release (CE rpm) <docker@docker.com>"
 Fingerprint: 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35
 From       : https://download.docker.com/linux/centos/gpg
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                          1/1 
  Running scriptlet: libsepol-2.9-1.el8.x86_64                                1/1 
。。。。。。
python3-setools-4.3.0-2.el8.x86_64                                              
  containerd.io-1.4.3-3.1.el8.x86_64                                              
  docker-ce-cli-1:20.10.3-3.el8.x86_64                                            
  docker-ce-rootless-extras-20.10.3-3.el8.x86_64                                  

Complete!
[root@Raygussie yum.repos.d]# 

启动docker

[root@Raygussie ~]# systemctl enable  --now docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.

查看docker状态

[root@Raygussie ~]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset>
   Active: active (running) since Fri 2021-02-26 03:58:26 CST; 2min 3s ago
     Docs: https://docs.docker.com
 Main PID: 13865 (dockerd)
    Tasks: 11
   Memory: 47.5M
   CGroup: /system.slice/docker.service
           └─13865 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/contain>

Feb 26 03:58:19 Raygussie dockerd[13865]: time="2021-02-26T03:58:19.784359660+08:>
Feb 26 03:58:19 Raygussie dockerd[13865]: time="2021-02-26T03:58:19.784464350+08:>
Feb 26 03:58:19 Raygussie dockerd[13865]: time="2021-02-26T03:58:19.784715063+08:>
Feb 26 03:58:25 Raygussie dockerd[13865]: time="2021-02-26T03:58:25.060643063+08:>
Feb 26 03:58:26 Raygussie dockerd[13865]: time="2021-02-26T03:58:26.201491271+08:>
Feb 26 03:58:26 Raygussie dockerd[13865]: time="2021-02-26T03:58:26.489748836+08:>
Feb 26 03:58:26 Raygussie dockerd[13865]: time="2021-02-26T03:58:26.530920550+08:>
Feb 26 03:58:26 Raygussie dockerd[13865]: time="2021-02-26T03:58:26.531179856+08:>
Feb 26 03:58:26 Raygussie systemd[1]: Started Docker Application Container Engine.
Feb 26 03:58:26 Raygussie dockerd[13865]: time="2021-02-26T03:58:26.571104822+08:>
lines 1-20/20 (END)

docker加速

docker-ce的配置文件是/etc/docker/daemon.json,此文件默认不存在,需要我们手动创建并进行配置,而docker的加速就是通过配置此文件来实现的。

docker的加速有多种方式:

  • docker cn
  • 中国科技大学加速器
  • 阿里云加速器(需要通过阿里云开发者平台注册帐号,免费使用个人私有的加速器)

设置加速器

编辑
[root@Raygussie ~]# vi /etc/docker/daemon.json

{
            "registry-mirrors": ["https://zyva0762.mirror.aliyuncs.com"]
}

重启rocker
[root@Raygussie ~]# systemctl daemon-reload
[root@Raygussie ~]# systemctl restart docker

查看docker状态

[root@Raygussie ~]# docker info
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 20.10.3
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 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: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 269548fa27e0089a8b8278fc4fc781d7f65a939b
 runc version: ff819c7e9184c13b7c2607fe6c30ae19403a7aff
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 4.18.0-80.el8.x86_64
 Operating System: Red Hat Enterprise Linux 8.0 (Ootpa)
 OSType: linux
 Architecture: x86_64
 CPUs: 4
 Total Memory: 3.827GiB
 Name: Raygussie
 ID: 22AQ:HFL6:ZLSE:4CW5:ARD2:Z6RN:4SQV:GKOD:HVPN:PJDP:NIJK:XQGJ
 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://zyva0762.mirror.aliyuncs.com/
 Live Restore Enabled: false

WARNING: No blkio weight support
WARNING: No blkio weight_device support

docker常用操作

命令 功能

docker search

在官网上搜索镜像
docker pull 下载官网的镜像,不加版本号默认下载最新版本
docker images 查看已有镜像
docker create 创建一个容器
docker start 启动容器
docker run 运行容器
docker attach 进入容器
docker ps 查看正在运行的容器
docker logs 查看容器日志
docker restart 重启容器
docker stop 停止容器运行
docker kill 强制终止容器(不推荐)
docker rm 删除容器
docker exec 进入容器
docker info 查看docker整个的信息
docker inspect 查看容器的各种信息

演示:

  • docker search
[root@Raygussie ~]# docker search httpd
NAME                                    DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
httpd                                   The Apache HTTP Server Project                  3371      [OK]       
centos/httpd-24-centos7                 Platform for running Apache httpd 2.4 or bui…   36                   
centos/httpd                                                                            33                   [OK]
polinux/httpd-php                       Apache with PHP in Docker (Supervisor, CentO…   4                    [OK]
salim1983hoop/httpd24                   Dockerfile running apache config                2                    [OK]
lead4good/httpd-fpm                     httpd server which connects via fcgi proxy h…   1                    [OK]
solsson/httpd-openidc                   mod_auth_openidc on official httpd image, ve…   1                    [OK]
。。。。。。
  • docker pull
[root@Raygussie ~]# docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
a076a628af6f: Pull complete 
e444656f7792: Pull complete 
0ec35e191b09: Pull complete 
4aad5d8db1a6: Pull complete 
eb1da3ea630f: Pull complete 
Digest: sha256:2fab99fb3b1c7ddfa99d7dc55de8dad0a62dbe3e7c605d78ecbdf2c6c49fd636
Status: Downloaded newer image for httpd:latest
docker.io/library/httpd:latest
  • docker images
[root@Raygussie ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
httpd        latest    683a7aad17d3   6 weeks ago   138MB
  • docker create
[root@Raygussie ~]# docker create httpd:2.4-alpine
e92a84c778e7768db0194a224283beed3ae778db85ae5114c8da752537af1baf
  • docker start
[root@Raygussie ~]# docker start e92a84c778e7
e92a84c778e7
[root@Raygussie ~]# docker ps
CONTAINER ID   IMAGE              COMMAND              CREATED         STATUS         PORTS     NAMES
e92a84c778e7   httpd:2.4-alpine   "httpd-foreground"   6 minutes ago   Up 6 seconds   80/tcp    heuristic_mahavira
  • docker run
[root@Raygussie ~]# docker run httpd:latest
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[Thu Feb 25 20:45:29.243123 2021] [mpm_event:notice] [pid 1:tid 140395745399936] AH00489: Apache/2.4.46 (Unix) configured -- resuming normal operations
[Thu Feb 25 20:45:29.243445 2021] [core:notice] [pid 1:tid 140395745399936] AH00094: Command line: 'httpd -D FOREGROUND'
  • docker attach
[root@Raygussie ~]# docker attach f59f43d50ef8
172.17.0.1 - - [25/Feb/2021:21:01:49 +0000] "GET / HTTP/1.1" 200 45
172.17.0.1 - - [25/Feb/2021:21:01:51 +0000] "GET / HTTP/1.1" 200 45
172.17.0.1 - - [25/Feb/2021:21:01:52 +0000] "GET / HTTP/1.1" 200 45
172.17.0.1 - - [25/Feb/2021:21:01:52 +0000] "GET / HTTP/1.1" 200 45
  • docker ps
[root@Raygussie ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@Raygussie ~]# docker ps -a
CONTAINER ID   IMAGE              COMMAND              CREATED         STATUS    PORTS     NAMES
e92a84c778e7   httpd:2.4-alpine   "httpd-foreground"   5 minutes ago   Created             heuristic_mahavira
  • docker logs
[root@Raygussie ~]# docker logs e9c0d6e23563 
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[Thu Feb 25 20:46:47.589331 2021] [mpm_event:notice] [pid 1:tid 139711880459392] AH00489: Apache/2.4.46 (Unix) configured -- resuming normal operations
[Thu Feb 25 20:46:47.589499 2021] [core:notice] [pid 1:tid 139711880459392] AH00094: Command line: 'httpd -D FOREGROUND'
[Thu Feb 25 20:47:18.936443 2021] [mpm_event:notice] [pid 1:tid 139711880459392] AH00491: caught SIGTERM, shutting down
  • docker restar
[root@Raygussie ~]# docker start e92a84c778e7
e92a84c778e7
[root@Raygussie ~]# docker restart e92a84c778e7
e92a84c778e7
[root@Raygussie ~]# docker ps -a
CONTAINER ID   IMAGE              COMMAND              CREATED         STATUS         PORTS     NAMES
e92a84c778e7   httpd:2.4-alpine   "httpd-foreground"   9 minutes ago   Up 8 seconds   80/tcp    heuristic_mahavira
  • docker stop
[root@Raygussie ~]# docker stop e92a84c778e7
e92a84c778e7
[root@Raygussie ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
  • docker kill
[root@Raygussie ~]# docker kill e92a84c778e7
e92a84c778e7
[root@Raygussie ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
  • docker rm
[root@Raygussie ~]# docker rm e92a84c778e7
e92a84c778e7
[root@Raygussie ~]# docker ps 
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@Raygussie ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

 [root@Raygussie ~]# docker rm -f e606ff8a6905
 e606ff8a6905
 [root@Raygussie ~]# docker ps -a
 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

 
  • docker exec
[root@Raygussie ~]# docker exec -it 2f51f41d2b26 /bin/bash
root@2f51f41d2b26:/usr/local/apache2# ls
bin  build  cgi-bin  conf  error  htdocs  icons  include  logs    modules
root@2f51f41d2b26:/usr/local/apache2# cd bin/
root@2f51f41d2b26:/usr/local/apache2/bin# ls
ab       checkgid   envvars-std   htdbm     httpd      rotatelogs
apachectl  dbmmanage  fcgistarter   htdigest  httxt2dbm   suexec
apxs       envvars    htcacheclean  htpasswd  logresolve
root@2f51f41d2b26:/usr/local/apache2/bin# exit
exit
[root@Raygussie ~]# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED              STATUS              PORTS     NAMES
2f51f41d2b26   httpd     "httpd-foreground"   About a minute ago   Up About a minute   80/tcp    unruffled_lewin
  • docker info
[root@Raygussie ~]# docker info
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)

Server:
 Containers: 3
  Running: 0
  Paused: 0
  Stopped: 3
 Images: 2
 Server Version: 20.10.3
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
。。。。。。
  • docker inspect
[root@Raygussie ~]# docker inspect a8974fc34766
[
    {
        "Id": "a8974fc347662586624c959a93d8c639767387d92d93fa65659e88d236d38e8a",
        "Created": "2021-02-25T20:44:19.761464715Z",
        "Path": "httpd-foreground",
        "Args": [],
        "State": {
            "Status": "created",
            "Running": false,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 0,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "0001-01-01T00:00:00Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
。。。。。。

原文地址:https://www.cnblogs.com/mfdsg/p/14450309.html