一篇文章带你快速入门 Docker

本贴最后更新于 1003 天前,其中的信息可能已经事过景迁

一、简介

  1. 什么是Docker?

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上运行,方便做持续集成并有助于整体的发布的容器虚拟化技术。

  1. Docker的应用场景
  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
  1. Docker的核心概念:

1、镜像: Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统

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

3、仓库: 仓库可看成一个代码控制中心,用来保存镜像

二、安装配置

  1. 安装

安装命令如下:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

也可以使用国内 daocloud 一键安装命令:

curl -sSL https://get.daocloud.io/docker | sh
  1. 配置镜像加速器

针对Docker客户端版本大于 1.10.0 的用户

您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

各大云服务厂商都有提供镜像加速服务,登录之后可以在自己获取。

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://自己的云服务的加速地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

三、操作命令

1、docker帮助命令

  • 启动docker :systemctl start docker
  • 停止docker: systemctl stop docker
  • 重启docker: systemctl restart docker
  • 查看docker状态:systemctl status docker
  • 开机启动:systemctl enable docker
  • 查看docker概要信息:docker info
  • 查看帮助文档:docker --help
  • 查看命令帮助文档:docker 命令 --help

2、镜像命令

  • 列出本地所有镜像:docker images

    参数:

    -a:列出本地所有镜像
    -q:只显示镜像ID

  • 搜索镜像:docker search 镜像名
  • 下载镜像:docker pull 镜像名:版本

    不指定版本,默认下载最新版

  • 查看容器镜像,容器,数据卷所占空间: docker system df
  • 删除镜像 :docker rmi 镜像ID
    • 删除单个:docker rmi 镜像1ID
    • 删除多个: docker rmi 镜像1ID 镜像2ID

3、容器命令

  • 创建容器:docker run 镜像名

    demo:

    docker run 镜像名 -i -t --name newname 
    

    参数:

    -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
    -d: 后台运行容器,并返回容器ID;
    -i: 以交互模式运行容器,通常与 -t 同时使用;
    -P: 随机端口映射,容器内部端口随机映射到主机的端口
    -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
    -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
    --name="aa": 为容器指定一个名称;
    -h "mars": 指定容器的hostname;
    -e username="ritchie": 设置环境变量;
    --env-file=[]: 从指定文件读入环境变量;
    -m :设置容器使用内存最大值;
    --link=[]: 添加链接到另一个容器;
    --expose=[]: 开放一个端口或一组端口;
    --volume , -v: 绑定一个卷

    • 查看容器:docker ps

      • 查看所有启动的容器(包括停止的容器),加参数 -a
      
      

    docker ps -a

    
     - 进入容器:`docker exec -it  容器名|ID  /bin/bash`
    
    - 退出容器:容器内执行命令`exit`
    
    
  • 停止容器运行:doker stop 容器名

  • 启动容器:docker start 容器名

  • 删除容器:docker rm 容器名

四、数据卷

  1. 什么是数据卷

Docker容器删除后,在容器中产生的数据也会销毁,容器内部如何和外部机器共享数据,容器之间数据交互怎么解决?

  1. 配置数据卷

启动容器时,使用参数 -v 设置数据卷

docker run -v 宿主机目录(文件):容器内目录(文件)

同时挂载多个文件和目录

docker run -v 宿主机目录1(文件):容器内目录1(文件) -v 宿主机目录2(文件):容器内目录2(文件)

多个容器挂载同一个文件

docker run -it --name Cb -v /home/data:/v2/data centos

docker run -it --name Cb -v /home/data:/v1/data ubuntu
  1. 数据卷容器的配置

1、创建数据卷容器

docker run -it --name=musen -v /volume centos

2、创建容器继承数据卷容器的挂载目录

docker run -it --name=a1 --volumes-form centos
  1. 数据卷管理命令
  • 查看所有的数据卷

    docker volume ls
    
  • 删除指定的数据卷

    docker volume rm 数据卷
    
  • 查看数据卷的具体位置

    [root@ecs-170297 home]# docker volume inspect jenkins_home
    [
        {
            "CreatedAt": "2022-02-16T22:00:38+08:00",
            "Driver": "local",
            "Labels": null,
            # 数据卷数据存储的具体位置
            "Mountpoint": "/var/lib/docker/volumes/jenkins_home/_data",
            "Name": "jenkins_home",
            "Options": null,
            "Scope": "local"
        }
    ]
    
    

五、端口映射

将宿主机的端口和容器内部端口进行映射,实现外部机器可以访问容器

-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口

docker run -id -p 3307:3306  centos:7

六、DockerFile

1、什么是 Dockerfile?

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

2、镜像制作

  • 容器转为镜像
# 把容器打包为镜像
docker commit 容器ID 镜像名称:版本号
# 把镜像转换为压缩文件
docker save -o 压缩文件名称 镜像名称:版本号
# 将压缩文件还原为镜像
docker load -i 压缩文件名称
  • 通过Docker File制作镜像
    • 1、编写DockerFile文件
    FROM centos:7
    MAINTAINER musen<121292679@qq.com>
    RUN yum install -y vim
    WROKDIR /usr
    CMD /bin/bash
    
    
    • 2、通过dockerFile构建镜像
    docker build -f ./xxxDcokerFile -t musenCentos:1 .
    

    参数说明

    • -f:指定dockerFile文件
    • -t:指定构建出来的镜像名和版本

3、DockerFile命令

  • FROM: 构建镜像基于哪个镜像
  • MAINTAINER :镜像维护者姓名或邮箱地址
  • RUN :构建镜像时运行的指令
  • CMD :运行容器时执行的shell环境
  • VOLUME : 指定容器挂载点到宿主机自动生成的目录或其他容器
  • USER :为RUN、CMD、和 ENTRYPOINT 执行命令指定运行用户
  • WORKDIR: 为 RUN、CMD、ENTRYPOINT、COPY 和 ADD 设置工作目录,就是切换目录
  • HEALTHCHECH :健康检查
  • ARG: 构建时指定的一些参数
  • EXPOSE :声明容器的服务端口(仅仅是声明)
  • ENV: 设置容器环境变量
  • ADD: 拷贝文件或目录到容器中,如果是URL或压缩包便会自动下载或自动解压
  • COPY:拷贝文件或目录到容器中,跟ADD类似,但不具备自动下载或解压的功能
  • ENTRYPOINT:运行容器时执行的shell命令

七、Docker Compose

1、 简介和安装

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

Compose 安装

下载Compose

# github下载
$ sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 国内镜像下载
$sudo curl -L https://get.daocloud.io/docker/compose/releases/download/2.28.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

将可执行权限应用于二进制文件:

$ sudo chmod +x /usr/local/bin/docker-compose

验证是否安装成功

docker-compose --version

卸载

$ sudo rm /usr/local/bin/docker-compose

2、Compose 使用步骤:

  • 使用 Dockerfile 定义应用程序的环境。
  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  • 执行 docker-compose up 命令来启动并运行整个应用程序。

3、Compose常用指令

回帖
请输入回帖内容 ...