Docker&Docker-compose的安装及配置

一、Docker的安装与配置

安装基于Linux CentOS_7.9

cat /etc/redhat-release  # 查看CentOS版本

docker版本20.10.12

docker --version        # 查看docker版本

1.1 Docker介绍

​ Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 能够将应用程序与基础架构分开,从而可以快速交付软件。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

1.2 Docker的安装

1.首先卸载系统中旧版本的docker

 yum remove docker \
     docker-client \
     docker-client-latest \
     docker-common \
     docker-latest \
     docker-latest-logrotate \
     docker-logrotate \
     docker-engine

2.安装依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2 

3.安装gcc

yum install -y gcc gcc-c++

4.设置stable仓库(可选国内源地址,这里使用的是阿里云)

yum-config-manager --add-repo  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

5.更新yum索引

yum makecache fast

6.安装docker-ce

yum install docker-ce docker-ce-cli containerd.io

7.启动docker并进行查看

systemctl start docker
ps -ef | grep docker

8.使用docker命令运行一个镜像(这里以hello world为例,如果没有则会自动下载)

docker run hello-world

1.3 Docker常用命令

1.拉取镜像(可以在docker hub上搜索镜像,镜像名后跟版本号或者最后发行版本)

docker pull <镜像名:tag>
# 例如以下代码
docker pull mysql:latest

2.删除容器

docker rm <容器名 or ID>

3.查看容器日志

docker logs -f <容器名 or ID>

4.查看正在运行的容器

docker ps
docker ps -a # 为查看所有的容器,包括已经停止的。

5.删除所有容器

docker rm $(docker ps -a -q)

6.停止、启动、杀死指定容器

docker start <容器名 or ID> # 启动容器
docker stop <容器名 or ID> # 启动容器
docker kill <容器名 or ID> # 杀死容器

7.查看所有镜像

docker images

8.后台运行

docker run -d 镜像名
# 例如以下代码
docker run -d -p 3306:3306 --name mysql mysql

9.暴露端口

# 一共有三种形式进行端口映射
docker -p ip:hostPort:containerPort # 映射指定地址的主机端口到容器端口
# 例如:docker -p 127.0.0.1:3306:3306 映射本机3306端口到容器的3306端口
docker -p ip::containerPort # 映射指定地址的任意可用端口到容器端口
# 例如:docker -p 127.0.0.1::3306 映射本机的随机可用端口到容器3306端口
docer -p hostPort:containerPort # 映射本机的指定端口到容器的指定端口
# 例如:docker -p 3306:3306 # 映射本机的3306端口到容器的3306端口

10.映射数据卷

docker -v /home/data:/opt/data # 这里/home/data 指的是宿主机的目录地址,后者则是容器的目录地址

注 意 : − p ( 小 写 ) 容 器 、 − P ( 大 写 ) 随 机 、 − i 交 互 、 − d 后 台 、 − t 终 端 注意:-p(小写) 容器 、 -P(大写)随机 、 -i 交互 、 -d 后台 、 -t 终端 pPidt

1.4 Docker卸载

1.删除安装包:

yum remove docker-ce docker-ce-cli containerd.io

2.删除镜像、容器、配置文件等内容:

rm -rf /var/lib/docker
rm -rf /var/lib/containerd

二、 Docker-compose的 安装与配置

2.1 Docker-Compose介绍

​ Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用系统,通常由多个容器组成,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知,Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用。
使用 Docker Compose 可以轻松、高效的管理容器, Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务,非常适合组合使用多个容器进行开发的场景。

2.2 Docker-Compose和Docker兼容性

Compose file formatDocker Engine release
Compose specification19.03.0+
3.819.03.0+
3.718.06.0+
3.618.02.0+
3.517.12.0+
3.417.09.0+
3.317.06.0+
3.217.04.0+
3.11.13.1+
3.01.13.0+
2.417.12.0+
2.317.06.0+
2.21.13.0+
2.11.12.0+
2.01.10.0+

2.3 Dcoker-Compose的安装

1.运行以下命令以下载 Docker Compose

curl -L "https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

若是github访问太慢,可以用daocloud下载

curl -L "https://get.daocloud.io/docker/compose/releases/download/v2.2.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

2.添加docker-compose的读写执行权限

chmod -R 777 /usr/local/bin/docker-compose

3.查看docker-compose是否安装成功

docker-compose --version 

2.4 Docker-Compose卸载

以二进制包方式安装的,删除二进制文件即可:

rm /usr/local/bin/docker-compose

2.5 Docker-Compose常用命令

1.执行docker-compose [COMMAND] --help 或者 docker-compose help [COMMAND]可以查看具体某个命令的使用格式。如下:

docker-compose --help

img

2.命令参数介绍:

  • -f, --file FILE 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定;

  • -p, --project-name NAME 指定项目名称,默认将使用所在目录名称作为项目名;

  • –x-networking 使用 Docker 的可拔插网络后端特性;

  • –x-network-driver DRIVER 指定网络后端的驱动,默认为 bridge;

  • –verbose 输出更多调试信息;

  • -v, --version 打印版本并退出;

  1. 常用命令
docker-compose up       #创建并启动容器
docker-compose up -d    #创建并后台启动容器
docker-compose ps       #查看当前compose进程
docker-compose start    #启动容器
docker-compose stop     #关闭容器
docker-compose down     #关闭并移除容器
docker-compose logs     #查看容器日志
docker-compose down  --volumes #关闭并移除容器并删除容器清除存储
docker-compose pull     #拉取服务依赖的镜像
docker-compose restart  #重启项目中的服务
docker-compose rm       #删除所有(停止状态的)服务容器

三、 Docker-Compose模板文件

3.1 Docker-compose.yml模板介绍

​ Compose允许用户通过一个docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
Compose模板文件是一个定义服务、网络和卷的YAML文件。Compose模板文件默认路径是当前目录下的docker-compose.yml,可以使用.yml或.yaml作为文件扩展名。Docker-Compose标准模板文件应该包含version、services、networks 三大部分,最关键的是services和networks两个部分。

​ 以本地redis的docker-compose配置文件为例:

version: '3'
services:
   redis:
    image: redis
    container_name: redis
    volumes:
      - /home/docker/redis/data:/data
      - /home/docker/redis/conf/redis.conf:/etc/redis/redis.conf
      - /home/docker/redis/logs:/logs
    command: redis-server /etc/redis/redis.conf
    ports:
      - 6379:6379   

1、image

image是指定服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像。

services: 
    redis: 
        image: redis

2、command

使用command可以覆盖容器启动后默认执行的命令。
command: bundle exec thin -p 3000

3、container_name

Compose的容器名称格式是:<项目名称><服务名称><序号>
可以自定义项目名称、服务名称,但如果想完全控制容器的命名,可以使用标签指定:
container_name: redis

4、ports

ports用于映射端口的标签。
使用HOST:CONTAINER格式或者只是指定容器的端口,宿主机会随机映射端口。

ports:
 - "3000"
 - "8000:8000"
 - "49100:22"
 - "127.0.0.1:8001:8001"

当使用HOST:CONTAINER格式来映射端口时,如果使用的容器端口小于60可能会得到错误得结果,因为YAML将会解析xx:yy这种数字格式为60进制。所以建议采用字符串格式。

5、volumes

挂载一个目录或者一个已存在的数据卷容器,可以直接使用 [HOST:CONTAINER]格式,或者使用[HOST:CONTAINER:ro]格式,后者对于容器来说,数据卷是只读的,可以有效保护宿主机的文件系统。
Compose的数据卷指定路径可以是相对路径,使用 . 或者 … 来指定相对目录。
数据卷的格式可以是下面多种形式:

volumes:
  // 只是指定一个路径,Docker 会自动在创建一个数据卷(这个路径是容器内部的)。
  - /var/lib/mysql
  // 使用绝对路径挂载数据卷
  - /opt/data:/var/lib/mysql
  // 以 Compose 配置文件为中心的相对路径作为数据卷挂载到容器。
  - ./cache:/tmp/cache
  // 使用用户的相对路径(~/ 表示的目录是 /home/<用户目录>/ 或者 /root/)。
  - ~/configs:/etc/configs/:ro
  // 已经存在的命名的数据卷。
  - datavolume:/var/lib/mysql

如果不使用宿主机的路径,可以指定一个volume_driver。
volume_driver: mydriver

6、expose

暴露端口,但不映射到宿主机,只允许能被连接的服务访问。仅可以指定内部端口为参数,如下所示:

expose:
    - "3000"
    - "8000"

7.restart

no是默认的重启策略,在任何情况下都不会重启容器。 指定为always时,容器总是重新启动。 如果退出代码指示出现故障错误,则on-failure将重新启动容器。

restart: "no"
restart: always
restart: on-failure
restart: unless-stopped

8、environment

添加环境变量。 你可以使用数组或字典两种形式。 任何布尔值; true,false,yes,no需要用引号括起来,以确保它们不被YML解析器转换为True或False。
只给定名称的变量会自动获取它在 Compose 主机上的值,可以用来防止泄露不必要的数据。

environment:
  RACK_ENV: development
  SHOW: 'true'
  SESSION_SECRET:

启容器。 指定为always时,容器总是重新启动。 如果退出代码指示出现故障错误,则on-failure将重新启动容器。

restart: "no"
restart: always
restart: on-failure
restart: unless-stopped

8、environment

添加环境变量。 你可以使用数组或字典两种形式。 任何布尔值; true,false,yes,no需要用引号括起来,以确保它们不被YML解析器转换为True或False。
只给定名称的变量会自动获取它在 Compose 主机上的值,可以用来防止泄露不必要的数据。

environment:
  RACK_ENV: development
  SHOW: 'true'
  SESSION_SECRET:
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐