CentOS 7.6 初识Docker、Docker基础

一、概述

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

而 Linux 容器是 Linux 发展出了另一种虚拟化技术,简单来讲, Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离,相当于是在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker ,就不用担心环境问题。

总体来说, Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

二、docker三要素

1、仓库

Docker 仓库是集中存放镜像文件的场所。镜像构建完成后,可以很容易的在当前宿主上运行,但是, 如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry (仓库注册服务器)就是这样的服务。有时候会把仓库 (Repository) 和仓库注册服务器 (Registry) 混为一谈,并不严格区分。Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。实际上,一个 Docker Registry 中可以包含多个仓库 (Repository) ,每个仓库可以包含多个标签 (Tag),每个标签对应着一个镜像。所以说,镜像仓库是 Docker 用来集中存放镜像文件的地方类似于我们之前常用的代码仓库

2、镜像

镜像是 Docker 运行容器的前提,仓库是存放镜像的场所,可见镜像更是 Docker 的核心。Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

3、容器

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

三、安装docker

下载关于docker的依赖环境

[root@docker ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

设置下载docker的镜像源,这里使用阿里云的镜像源,也可以使用官方源,但是官方源太慢了

[root@docker ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
已加载插件:fastestmirror, langpacks
adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo

安装docker

yum makecache fast 将软件包信息提前在本地缓存一份,用来提高搜索安装软件的速度

yum -y install docker-ce

docker-ce是docker团队认证、docker团队维护的一个社区版发行包,两者使用相同的包管理,docker-ce是所有 依赖包由docker团队管理,可以保证docker运行的稳定,适合作为纯docker管理的生产环境,即整个系统只有一个docker在跑,剩下所有应用都通过发布docker的容器来部署。docker企业版是docker-ee

[root@docker ~]# yum makecache fast
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
base                                                                                                  | 3.6 kB  00:00:00     
docker-ce-stable                                                                                      | 3.5 kB  00:00:00     
epel                                                                                                  | 4.7 kB  00:00:00     
extras                                                                                                | 2.9 kB  00:00:00     
updates                                                                                               | 2.9 kB  00:00:00     
(1/2): docker-ce-stable/x86_64/primary_db                                                             |  46 kB  00:00:00     
(2/2): docker-ce-stable/x86_64/updateinfo                                                             |   55 B  00:00:00     
元数据缓存已建立

[root@docker ~]# yum -y install docker-ce

启动docker,设置为开机自启

service docker start和systemctl start docker.service都可以

[root@docker ~]# service docker start
Redirecting to /bin/systemctl start docker.service

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

验证安装

docker version/docker --version 查看版本信息,version更加详细(官方软件源默认启用了最新的软件)

[root@docker ~]# docker version
Client: Docker Engine - Community
 Version:           19.03.13
 API version:       1.40
 Go version:        go1.13.15
 Git commit:        4484c46d9d
 Built:             Wed Sep 16 17:03:45 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.13
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       4484c46d9d
  Built:            Wed Sep 16 17:02:21 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.3.7
  GitCommit:        8fba4e9a7d01810a393d5d25a3621dc101981175
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

[root@docker ~]# docker --version
Docker version 19.03.13, build 4484c46d9d

docker --help 查看帮助,支持哪些管理和操作命令

[root@docker docker]# docker --help

Usage:	docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Options:
      --config string      Location of client config files (default "/root/.docker")
  -c, --context string     Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and
                           default context set with "docker context use")
  -D, --debug              Enable debug mode
  -H, --host list          Daemon socket(s) to connect to
  -l, --log-level string   Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
      --tls                Use TLS; implied by --tlsverify
      --tlscacert string   Trust certs signed only by this CA (default "/root/.docker/ca.pem")
      --tlscert string     Path to TLS certificate file (default "/root/.docker/cert.pem")
      --tlskey string      Path to TLS key file (default "/root/.docker/key.pem")
      --tlsverify          Use TLS and verify the remote
  -v, --version            Print version information and quit

Management Commands:
  builder     Manage builds
  config      Manage Docker configs
  container   Manage containers
  
…………省略部分内容

四、镜像加速

首先登陆阿里云官网:https://www.aliyun.com/?utm_content=se_1000301881‘

搜索“镜像加速”

在这里插入图片描述
点击进入容器控制台

在这里插入图片描述
左侧选择“镜像加速器”

在这里插入图片描述

[root@docker ~]# cd /etc/docker/
[root@docker docker]# ls
key.json

[root@docker docker]# tee /etc/docker/daemon.json <<-'EOF'
> {
    
    
>   "registry-mirrors": ["https://noj876oc.mirror.aliyuncs.com"]
> }
> EOF
{
    
    
  "registry-mirrors": ["https://noj876oc.mirror.aliyuncs.com"]
}

[root@docker docker]# ls
daemon.json  key.json

重新加载配置,重启docker

[root@docker docker]# systemctl daemon-reload 
[root@docker docker]# systemctl restart docker

五、docker的仓库

1、官方仓库

docker官方:https://hub.docker.com/(需要登陆,涵盖的镜像应该非常全,但速度比较慢)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、国内仓库

网易云仓库:https://c.163yun.com/hub(需要登陆,但中文显示比较友好)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
DaoCloud:http://hub.daocloud.io/ (不需要登陆)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、镜像的操作

1、搜索镜像

docker search tomcat

在这里插入图片描述

2、拉取镜像

[root@docker ~]# docker pull tomcat

3、查看镜像

[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat              latest              f796d3d2c195        4 days ago          647MB
nginx               latest              7e4d58f0e5f3        9 days ago          133MB
busybox             latest              6858809bf669        11 days ago         1.23MB
centos              7                   7e6257c9f8d8        5 weeks ago         203MB
  • docker inspect tomcat:latest
  • docker inspect f796d3d2c195

使用 inspect 命令查看镜像详细信息,包括制作者、适应架构、各层的数字摘要等,后面可以跟镜像名也可以跟ID

在这里插入图片描述

4、添加标签

[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat              latest              f796d3d2c195        4 days ago          647MB
nginx               latest              7e4d58f0e5f3        9 days ago          133MB
busybox             latest              6858809bf669        11 days ago         1.23MB
centos              7                   7e6257c9f8d8        5 weeks ago         203MB
[root@docker ~]# docker tag tomcat:latest tomcat:9.20

[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat              9.20                f796d3d2c195        4 days ago          647MB
tomcat              latest              f796d3d2c195        4 days ago          647MB
nginx               latest              7e4d58f0e5f3        9 days ago          133MB
busybox             latest              6858809bf669        11 days ago         1.23MB
centos              7                   7e6257c9f8d8        5 weeks ago         203MB

5、删除镜像

使用docker rmi删除镜像

[root@docker ~]# docker rmi tomcat:9.20 
Untagged: tomcat:9.20
[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat              latest              f796d3d2c195        4 days ago          647MB
nginx               latest              7e4d58f0e5f3        9 days ago          133MB
busybox             latest              6858809bf669        11 days ago         1.23MB
centos              7                   7e6257c9f8d8        5 weeks ago         203MB

当给镜像打了多个标签的时候,使用ID是无法删除的

[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat              9.20                f796d3d2c195        4 days ago          647MB
tomcat              latest              f796d3d2c195        4 days ago          647MB
nginx               latest              7e4d58f0e5f3        9 days ago          133MB
busybox             latest              6858809bf669        11 days ago         1.23MB
centos              7                   7e6257c9f8d8        5 weeks ago         203MB

[root@docker ~]# docker rmi f796d3d2c195
Error response from daemon: conflict: unable to delete f796d3d2c195 (must be forced) - image is referenced in multiple repositories

报错:不能删除镜像,因为它被多个仓库引用了

可以认为当存在一个ID对应多个镜像名称的时候,它不知道该删除哪一个,所以这个时候删除操作后面要跟具体的镜像名称(带标签),当最后只存在唯一一个ID时才可以用ID去删除镜像

6、镜像的导入、导出

[root@docker ~]# docker  save -o /opt/tomcat tomcat:latest 
[root@docker ~]# cd /opt/
[root@docker opt]# ll
总用量 644112
-rw------- 1 root root 659568128 9  20 11:49 tomcat
[root@docker opt]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat              latest              f796d3d2c195        4 days ago          647MB
nginx               latest              7e4d58f0e5f3        9 days ago          133MB
busybox             latest              6858809bf669        11 days ago         1.23MB
centos              7                   7e6257c9f8d8        5 weeks ago         203MB
[root@docker opt]# 
[root@docker opt]# docker rmi f7
Untagged: tomcat:latest
Untagged: tomcat@sha256:1bab37d5d97bd8c74a474b2c1a62bbf1f1b4b62f151c8dcc472c7d577eb3479d
Deleted: sha256:f796d3d2c1954864eae249749f0a17480fb446c22053f4451e2c3514c561638b
Deleted: sha256:76dec020a539b1af61f711abf3b68cbada3a3a787413923a2ef76b47ade41337
Deleted: sha256:846b984a24b53d4a0b1bcc6f1609da9a7fa1275f1a456a385a4c9a12f32a49bd
Deleted: sha256:a6f52ba4967c48d8aba223ff71a9764d2dacd53490af3d1e73da96cc66f3e05b
Deleted: sha256:b0cb8e4a85df51db4e5fe10dfa149b2b3f1170c7a3a8d33b0c5ef6e104b9a980
Deleted: sha256:6a05ecc17b6c6bc8a97223bf4a04aa5ad34084270d86ca0605bf5a603e1656f4
Deleted: sha256:40fef2729fc360297758bf86b3011b68ca41f3880f6d6578734b0280b3d8e344
Deleted: sha256:e40886afa47f1a991f807ca03358366b86c1f65471c6c7e10187cf94eae5bcd1
Deleted: sha256:28189e70cc47eb3c32769ee0aad10e6b18a8886206db4df9ccfacb50878ca1ed
Deleted: sha256:92b912e56b356aeb8e2ab873bdf557ee80fbd3bec4482684fa0f0b0c30896acc
Deleted: sha256:4ef54afed7804a44fdeb8cf6562c2a1eb745dcaabd38b1ac60126f0966bf6aef
[root@docker opt]# 
[root@docker opt]# 
[root@docker opt]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              7e4d58f0e5f3        9 days ago          133MB
busybox             latest              6858809bf669        11 days ago         1.23MB
centos              7                   7e6257c9f8d8        5 weeks ago         203MB
[root@docker opt]# docker load < /opt/tomcat 
4ef54afed780: Loading layer [==================================================>]  119.2MB/119.2MB
6add0d2b5482: Loading layer [==================================================>]   17.1MB/17.1MB
d37096232ed8: Loading layer [==================================================>]  17.85MB/17.85MB
17bdf5e22660: Loading layer [==================================================>]    150MB/150MB
df95ed2a791d: Loading layer [==================================================>]  11.52MB/11.52MB
4f17d163126f: Loading layer [==================================================>]  3.584kB/3.584kB
8b185d674aef: Loading layer [==================================================>]  323.2MB/323.2MB
eb6e8fe5c6dc: Loading layer [==================================================>]   2.56kB/2.56kB
1485ce09f585: Loading layer [==================================================>]  20.57MB/20.57MB
b654a29de9ee: Loading layer [==================================================>]  2.048kB/2.048kB
Loaded image: tomcat:latest
[root@docker opt]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat              latest              f796d3d2c195        4 days ago          647MB
nginx               latest              7e4d58f0e5f3        9 days ago          133MB
busybox             latest              6858809bf669        11 days ago         1.23MB
centos              7                   7e6257c9f8d8        5 weeks ago         203MB

第二种方式导入、导出:

[root@docker opt]# docker save -o /opt/nginx 7e4d58f0e5f3   <----后面跟镜像ID
[root@docker opt]# ll
总用量 777748
-rw------- 1 root root 136841216 9  20 12:03 nginx
-rw------- 1 root root 659568128 9  20 11:49 tomcat

[root@docker opt]# docker load -i nginx     <----后面不用加路径,-i指定要导入的文件即可
Loaded image ID: sha256:7e4d58f0e5f3b60077e9a5d96b4be1b974b5a484f54f9393000a99f3b6816e3d
[root@docker opt]# 
[root@docker opt]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat              9.20                f796d3d2c195        4 days ago          647MB
tomcat              latest              f796d3d2c195        4 days ago          647MB
nginx               latest              7e4d58f0e5f3        9 days ago          133MB
busybox             latest              6858809bf669        11 days ago         1.23MB
centos              7                   7e6257c9f8d8        5 weeks ago         203MB

七、容器的操作

1、运行容器

1、第一种方式:可以直接使用docker run来运行一个容器,成功运行的状态为Up

-d:以后台守护进程的方式运行
-p:指定端口号映射,前面的为要映射的外部端口号,供访问,后面的端口号为linux中的服务端口号
-P:会随机指定一个端口号,从32768开始
–name:给容器起个名字

[root@docker opt]# docker run -d -p 8080:8080 --name tomcat f796d3d2c195
8da33772c77e8a1e2c54d1f2cc1915a3650d0e0c47c6aabaf37ff9e6378014ed

[root@docker local]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
1e5ce5b321bb        f796d3d2c195        "catalina.sh run"   2 hours ago         Up 3 seconds        0.0.0.0:8080->8080/tcp   tomcat

2、第二种方式:使用docker create创建容器,使用docker start启动容器

[root@docker ~]# docker create -it centos:7 /bin/bash
c34e8da5f8b6e26d6980159f2622e968a94f89c53a39e737147e50eec71d26f8
[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
c34e8da5f8b6        centos:7            "/bin/bash"         13 seconds ago      Created                                 tender_lewin
[root@docker ~]# docker start c3
c3
[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
c34e8da5f8b6        centos:7            "/bin/bash"         26 seconds ago      Up 3 seconds                            tender_lewin

2、在容器内执行命令

[root@docker ~]# docker exec -it c34e8da5f8b6 /bin/bash
[root@c34e8da5f8b6 /]# 
[root@docker ~]# docker run centos:7 /bin/bash -c ls /
anaconda-post.log
bin
dev
etc
home
lib
……省略部分内容
[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS                     PORTS               NAMES
68232fc6d0f3        centos:7            "/bin/bash -c ls /"   3 minutes ago       Exited (0) 3 minutes ago                       dazzling_mclean
c34e8da5f8b6        centos:7            "/bin/bash"           30 minutes ago      Up 29 minutes                                  tender_lewin

3、停止容器

使用docker stop后面跟容器ID来停止某一个容器,停止的状态是Exited

[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
1e5ce5b321bb        f796d3d2c195        "catalina.sh run"   7 hours ago         Up 6 hours          0.0.0.0:8080->8080/tcp   tomcat

[root@docker ~]# docker stop 1e   <-----ID号可以简写,只要能唯一标识就可以
1e
[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES
1e5ce5b321bb        f796d3d2c195        "catalina.sh run"   7 hours ago         Exited (143) 4 seconds ago                       tomcat

4、删除容器

使用docker rm来删除容器,必须是停止状态的容器才能被删除,否则会报错

[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                            PORTS               NAMES
1e5ce5b321bb        f796d3d2c195        "catalina.sh run"   7 hours ago         Exited (143) About a minute ago                       tomcat1
[root@docker ~]# docker rm 1e
1e

注意:如果要删除某个镜像,也要先确定该镜像有没有容器正在运行,如果有需要先停止

批量删除已停止的容器

[root@docker opt]# docker ps -a | awk '{print "docker rm "$1}' | bash
Error: No such container: CONTAINER
c0706e2f9110
68232fc6d0f3
Error response from daemon: You cannot remove a running container c34e8da5f8b6e26d6980159f2622e968a94f89c53a39e737147e50eec71d26f8. Stop the container before attempting removal or force remove

[root@docker opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
c34e8da5f8b6        centos:7            "/bin/bash"         2 hours ago         Up About an hour                        tender_lewin

5、容器的导入、导出

使用docker export导出容器到文件

[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS                      PORTS               NAMES
c0706e2f9110        centos:7            "/bin/bash -c ls /"   35 seconds ago      Exited (0) 34 seconds ago                       jovial_gauss
68232fc6d0f3        centos:7            "/bin/bash -c ls /"   44 minutes ago      Exited (0) 44 minutes ago                       dazzling_mclean
c34e8da5f8b6        centos:7            "/bin/bash"           About an hour ago   Up About an hour                                tender_lewin
[root@docker ~]# docker export c34e8da5f8b6 > /opt/centos7_c

[root@docker ~]# cd /opt
[root@docker opt]# ls
cento_c  nginx  tomcat

使用docker import导入容器

[root@docker opt]# cat cento_c | docker import - centos:7-1
sha256:7a6937221a357f32d1765d8761a8d78d984faf698ec8219f67aaaa8f0bf012c9
[root@docker opt]# 
[root@docker opt]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              7-1                 7a6937221a35        9 seconds ago       203MB
tomcat              latest              f796d3d2c195        4 days ago          647MB
nginx               latest              7e4d58f0e5f3        10 days ago         133MB
busybox             latest              6858809bf669        11 days ago         1.23MB
centos              7                   7e6257c9f8d8        5 weeks ago         203MB

注意:容器导入之后会产生一个新的镜像而非容器,镜像ID是一个全新的

猜你喜欢

转载自blog.csdn.net/shengjie87/article/details/108688481