Docker【1】入门篇:零基础 | 一入 Docker 深似海

入门篇,主要介绍下 Docker 的安装、常见术语、基本使用等,从零开始使用 Docker。

环境说明

  • 操作系统版本:Red Hat Enterprise Linux Server release 7.5 (Maipo)

安装

  1. 安装文章可参考官网:https://docs.docker.com/engine/install/centos/
    • 如果已经安装过了docker,可执行如下命令进行先卸载
$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
  1. 安装 yum-utils 软件包(提供了 yum-config-manager 程序)
$ sudo yum install -y yum-utils
  1. 配置稳定的 yum 源方便下载 Docker Engine,由于官网地址是在国外下载较慢,现进行修改为国内阿里云的源地址
$ sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  1. 安装最新版的Dcoker Engine和容器
$ sudo yum -y install docker-ce docker-ce-cli containerd.io
  1. 启动 Docker
$ sudo systemctl start docker
  1. 查看 Docker 版本
docker --version 
# 或者 
docker -v

Docker version 24.0.5, build ced0996

配置镜像加速

  1. 编辑配置文件/etc/docker/daemon.json
cat >/etc/docker/daemon.json<<EOF
{
  "registry-mirrors": ["http://hub-mirror.c.163.com/","https://ustc-edu-cn.mirror.aliyuncs.com/","https://docker.mirrors.ustc.edu.cn/"]
}
EOF
  1. 重新加载配置信息及重启docker服务
# 重新加载某个服务的配置文件
$ sudo systemctl daemon-reload

# 重新启动 docker
$ sudo systemctl restart docker

常见术语

镜像(image)

Docker镜像是一种特殊的文件系统,通常基于Linux的Root FileSystem。这个文件系统包含了能够在Linux内核上运行的程序以及相关的数据。你可以把Docker镜像理解为一个软件打包,其中包含了应用程序的所有必要组件,比如代码、运行时、库、环境变量和配置文件等。

当你使用Docker启动一个容器时,实际上就是在基于镜像创建一个运行环境。这个镜像就像是一个模板,用来生成容器。一个镜像可以启动多个容器,每个容器都是镜像的一个实例,它们共享相同的基础镜像,并且具有独立的运行环境。

Docker采用了类似于多次快照的存储技术,这使得镜像具有以下优势:

  • 多个应用程序可以共享同一个底层镜像,这样可以节省存储空间,并且简化管理。
  • 每个容器的IO操作和文件系统都是相互隔离的,这样可以保证容器之间的互相不受影响。
  • 通过挂载不同的目录或者卷(Volume),可以为单个镜像提供不同的配置和数据,这样同一个镜像就可以用来运行多个不同的业务容器,实现了高度的灵活性和可重用性。

容器(Container)

镜像(Image)和容器(Container)在 Docker 中是两个核心概念,它们之间的关系可以类比为面向对象程序设计中的类(Class)和实例(Instance)。

  1. 镜像(Image)和类(Class)

    • 镜像是一个只读的、静态的文件系统快照,它包含了运行应用程序所需的所有组件、依赖和配置信息。镜像可以看作是一个软件的打包和分发单元,类似于类中的定义,描述了应用程序的结构和配置。
  2. 容器(Container)和实例(Instance)

    • 容器是镜像的一个运行时实例,它包含了镜像的可执行代码、运行时环境以及任何必要的文件系统修改。每个容器都是相互隔离的运行环境,可以被创建、启动、停止、删除等操作。容器类似于类的实例,具有自己的状态和行为。
  3. 创建和操作

    • 镜像可以被用来创建多个容器实例,就像类可以被用来创建多个对象实例一样。
    • 容器可以运行镜像中定义的应用程序,类似于对象执行类中定义的方法。
  4. 生命周期

    • 镜像的生命周期独立于容器,镜像在构建后不会被修改,可以被多个容器实例共享和重用。
    • 容器的生命周期由用户控制,可以根据需要创建、启动、停止和删除。每个容器都是临时性的,它们可以根据需要动态创建和销毁。

镜像和容器共同构成了 Docker 的核心架构,镜像提供了应用程序的静态定义,而容器则提供了运行时的实例化环境,使得应用程序的部署和管理变得更加灵活和便捷。

使用一个简单的Java类来说明镜像和容器的概念
如下示例:创建一个名为Client的Java类,然后使用这个类来比喻镜像和容器的关系。

public class Client {
    private String name;

    public Client(String name) {
        this.name = name;
    }

    public void greet() {
        System.out.println("你好哇~, 我是 " + name);
    }

    public static void main(String[] args) {
        Client client1 = new Client("九皇");
        client1.greet();

        Client client2 = new Client("叔叔");
        client2.greet();
    }
}

说明:

(1). 类(Class)和镜像(Image)

  • 在这个比喻中,我们将Client.java文件比作是一个类的定义,就像镜像包含了应用程序的定义和配置。

(2). 对象(Object)和容器(Container)

  • 在Java中,我们通过创建Client类的实例来生成对象,例如client1client2。这些对象类似于镜像的运行时实例,即容器。

(3). 创建和操作

  • 我们可以使用Client类创建多个对象实例,比如client1client2。同样,我们可以使用同一个镜像创建多个容器实例。

(4). 生命周期

  • Client的定义是静态的,一旦编译完成就不会变化,这就好比镜像的不可变性。而对象client1client2的生命周期由程序控制,可以根据需要创建和销毁,这就像容器的生命周期由用户控制一样。

基本使用

镜像操作

查看镜像

[root@localhost ~]# docker images 
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
nginx         latest    04661cdce581   6 days ago    141MB
redis         latest    7faaec683238   5 weeks ago   113MB
hello-world   latest    feb5d9fea6a5   7 weeks ago   13.3kB

列属性的含义如下

  1. REPOSITORY(仓库):

    • 表示镜像所属的仓库名称。在 Docker 中,仓库用于存储和管理镜像,可以把它理解为镜像的集合。通常,仓库名称由镜像的提供者或者组织名字加上镜像名组成,中间用斜杠分隔。例如,“nginx”、“redis”、“hello-world” 等都是仓库名称。
  2. TAG(标签):

    • 表示镜像的标签,用于区分同一个仓库中不同版本的镜像。标签可以是任何字符串,通常用来表示镜像的版本号或者特定的构建标识符。例如,“latest” 表示最新版本,也可以是自定义的版本号或者日期。
  3. IMAGE ID(镜像 ID):

    • 是每个镜像的唯一标识符,用于在 Docker 中唯一地识别一个镜像。镜像 ID 是一个长字符串,通常使用前12个字符来表示。它是在构建镜像时由 Docker 自动生成的。
  4. CREATED(创建时间):

    • 表示镜像创建的时间或者构建的日期。它显示了镜像的构建时间,以便于了解镜像的新旧程度。
  5. SIZE(大小):

    • 表示镜像的大小,以字节或者其他适当的单位进行显示。这个大小包括了镜像中所有层的大小总和,可以用来估算镜像在磁盘上的占用空间。

搜索镜像

如果你需要从网络中查找需要的镜像,可以通过如下命令搜索

$ docker search 镜像名称

例如:

[root@localhost docker]# docker search tomcat
NAME                          DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
tomcat                        Apache Tomcat is an open source implementati…   3177      [OK]       
tomee                         Apache TomEE is an all-Apache Java EE certif…   93        [OK]       
dordoka/tomcat                Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base…   58                   [OK]
kubeguide/tomcat-app          Tomcat image for Chapter 1                      31                   
consol/tomcat-7.0             Tomcat 7.0.57, 8080, "admin/admin"              18                   [OK]
cloudesire/tomcat             Tomcat server, 6/7/8                            15                   [OK]
aallam/tomcat-mysql           Debian, Oracle JDK, Tomcat & MySQL              13                   [OK]
arm32v7/tomcat                Apache Tomcat is an open source implementati…   11                   
rightctrl/tomcat              CentOS , Oracle Java, tomcat application ssl…   7                    [OK]
arm64v8/tomcat                Apache Tomcat is an open source implementati…   6                    
maluuba/tomcat7-java8         Tomcat7 with java8.                             6                    
unidata/tomcat-docker         Security-hardened Tomcat Docker container.      5                    [OK]
amd64/tomcat                  Apache Tomcat is an open source implementati…   3                    
jelastic/tomcat               An image of the Tomcat Java application serv…   2                    
oobsri/tomcat8                Testing CI Jobs with different names.           2                    
cfje/tomcat-resource          Tomcat Concourse Resource                       2                    
fabric8/tomcat-8              Fabric8 Tomcat 8 Image                          2                    [OK]
chenyufeng/tomcat-centos      tomcat基于centos6的镜像                              1                    [OK]
picoded/tomcat7               tomcat7 with jre8 and MANAGER_USER / MANAGER…   1                    [OK]
camptocamp/tomcat-logback     Docker image for tomcat with logback integra…   1                    [OK]
99taxis/tomcat7               Tomcat7                                         1                    [OK]
ppc64le/tomcat                Apache Tomcat is an open source implementati…   1                    
softwareplant/tomcat          Tomcat images for jira-cloud testing            0                    [OK]
secoresearch/tomcat-varnish   Tomcat and Varnish 5.0                          0                    [OK]
s390x/tomcat                  Apache Tomcat is an open source implementati…   0                    
[root@localhost docker]# 

拉取镜像

从远程仓库中拉取(下载)指定名称的镜像到本地计算机。

docker pull 镜像名称

例如:
拉取 centos 镜像到本地,如果不声明 tag 镜像标签信息则默认拉取latest版本,也可以通过:https://hub.docker.com/ 搜索该镜像,查看支持的tag信息。

docker pull redis:5

如果没有标签5 那么默认将会拉取 latest 版本

删除镜像

docker rmi 镜像名称:标签

或者

docker rmi 镜像ID

示例

如下镜像清单中,删除 redis 镜像.

[root@localhost ~]# docker images 
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
nginx         latest    04661cdce581   6 days ago    141MB
redis         latest    7faaec683238   5 weeks ago   113MB
hello-world   latest    feb5d9fea6a5   7 weeks ago   13.3kB

删除 Redis 镜像,有两种方法

  1. 使用镜像名称和标签:
docker rmi redis:latest

这将会删除标签为 latest 的 Redis 镜像。

  1. 使用镜像ID:
docker rmi 7faaec683238

这将会删除镜像ID为 7faaec683238 的 Redis 镜像。

容器操作

查看

查看容器(运行中)

查看正在运行的容器。

[root@localhost docker]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost docker]# 

列属性的含义如下

  1. CONTAINER ID(容器ID):

    • 表示容器的唯一标识符,由 Docker 自动生成。每个容器都有一个唯一的ID,用于在 Docker 中唯一地标识一个容器。
  2. IMAGE(镜像):

    • 表示容器所使用的镜像。该列显示了容器所基于的镜像的名称。
  3. COMMAND(命令):

    • 表示容器启动时运行的命令。这里显示的是容器启动时执行的命令或者指令。
  4. CREATED(创建时间):

    • 表示容器的创建时间。这个时间显示了容器创建的日期和时间。
  5. STATUS(状态):

    • 表示容器的当前状态。可以是运行中(running)、停止(exited)、暂停(paused)等状态。
  6. PORTS(端口映射):

    • 表示容器内部的端口与主机上的端口的映射关系。如果容器中有端口映射到主机上,则会显示在这一列。
  7. NAMES(名称):

    • 表示容器的名称。每个容器都可以指定一个名称,用于在 Docker 中唯一标识容器。
查看容器(已停止)
 docker ps -f status=exited

这条命令 docker ps -f status=exited 是用于列出所有已经停止(exited)的容器。

命令详细解释一下:

  • docker ps 是 Docker 命令行工具提供的列出运行中容器的命令。(上面已经经过
  • -f status=exited 是一个选项,用于筛选容器。这里 -f 表示过滤器,status=exited 表示筛选出状态为“exited”的容器。
查看容器(所有)

查看所有容器(包括运行停止

$ docker ps -a
查看容器(最近创建的x个)
$ docker ps -n x

示例:
查看最近创建的 5个容器

$ docker ps -n 5

创建和启动容器

如下:是 Docker 命令行工具提供的用于运行容器的命令

$ docker run [options] images [command] [arg...]

其中各个部分的含义如下:

  • $ docker run:表示要运行容器的命令。
  • [options]:是一些选项,用于指定运行容器时的参数和配置。例如,可以通过 -d 选项指定容器在后台运行,通过 -p 选项指定端口映射等。
  • images:指定要运行的镜像名称。这个参数告诉 Docker 要基于哪个镜像来创建并运行容器。
  • [command] [arg...]:可选参数,用于指定容器启动时要执行的命令以及相应的参数。如果不提供这部分参数,则会使用镜像中默认的启动命令。
创建并进入容器

格式如下,运行容器并进入容器的 /bin/bash

$ docker run -it --name 容器名称(自定义) 镜像名称:标签 /bin/bash

注意:Docker容器运行必须有一个前台进程,如果没有前台进程执行,容器认为是空闲状态,就会自动退出。

示例:

[root@localhost docker]# docker run --name mynginx -P nginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
...[注意:这样运行命令后该终端将会被一直占用]...

查看运行中的容器

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS         PORTS                                     NAMES
f1c23f57bd5c   nginx     "/docker-entrypoint.…"   10 seconds ago   Up 9 seconds   0.0.0.0:49153->80/tcp, :::49153->80/tcp   mynginx
[root@localhost ~]# 

docker run --name mynginx -P nginx 该命令将会拉起一个nginx服务,端口(宿主机:随机,容器:80)

如需固定端口,需使用参数-p
例如:

docker run --name mynginx -p 8080:80 nginx

注意:

  1. 端口说明,前面的是宿主机、后面的是容器。(即:宿主机=8080,容器=80)
  2. --name 后面的名称不能重复,即:docker ps -a 命令检索出来的数据中 names列不能重复.
守护方式创建容器
$ docker run -di --name 容器名称 镜像名称:标签

或者

$ docker exec -it 容器名称|容器ID /bin/bash

示例

docker run -di --name my_nginx_container nginx:latest

查看运行中的实例

docker ps

CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS      NAMES
1a2b3c4d5e6f   nginx:latest   "nginx -g 'daemon of…"   2 minutes ago   Up 2 minutes   80/tcp     my_nginx_container

每一列的含义如下:

  1. CONTAINER ID(容器ID):

    • 表示容器的唯一标识符,由 Docker 自动生成。每个容器都有一个唯一的ID,用于在 Docker 中唯一地标识一个容器。
  2. IMAGE(镜像):

    • 表示容器所使用的镜像。该列显示了容器所基于的镜像的名称。
  3. COMMAND(命令):

    • 表示容器启动时运行的命令。这里显示的是容器启动时执行的命令或者指令。
  4. CREATED(创建时间):

    • 表示容器的创建时间。这个时间显示了容器创建的日期和时间。
  5. STATUS(状态):

    • 表示容器的当前状态。可以是运行中(Up)、停止(Exited)、暂停(Paused)等状态。
  6. PORTS(端口映射):

    • 表示容器内部的端口与主机上的端口的映射关系。如果容器中有端口映射到主机上,则会显示在这一列。
  7. NAMES(名称):

    • 表示容器的名称。每个容器都可以指定一个名称,用于在 Docker 中唯一标识容器。

停止与启动容器

# 停止容器
$ docker stop 容器名称|容器ID

# 启动容器
$ docker start 容器名称|容器ID
  • 28
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值