0


Docker 的使用

一、Docker 的作用和优势

软件集装箱化平台,可让开发者构建应用程序时,将它与环境一起打包到一个容器中,发布应用到任意平台中。
能在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用,
如:Tomcat运行在一个Docker,MySQL运行在另外一个Docker,两者可以运行在同一个服务器。

1.1、docker基本组成

**1.docker client 客户端 **
docker客户端输入指令,驱动服务端执行对应操作。

**2.docker daemon docker 守护进程 **
Docker的守护进程,客户端向Daemon发送命令去执行Docker相关操作,得到结果再通过Daemon将结果返回。

**3.docker images 镜像 **
Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。

**4.docker container 容器 **
镜像相当于Java中的类,容器就像实例化后的对象,一个镜像可以实例化多个容器,容器通过镜像启动。
镜像中的应用程序运行后形成的进程就是容器,是Docker会给容器进程做隔离,对外不可见。
Docker容器通过镜像启动,容器是Docker的执行单元,容器中可以运行客户的多个进程。

**5.docker registry 镜像仓库 **
Docker用仓库保存用户创建的镜像,仓库分共有和私有两种。
Docker公司自己提供了最大的公有仓库Docker Hub,可在Docker Hub上创建账户,保存分享自己创建的镜像。

1.2、Docker优势

**1.简化配置、打包软件、快速部署 **
能将环境和配置放入代码然后部署,Docker配置能在各种环境中使用,将应用环境和底层环境解耦。
Docker通过创建进程的容器,不必重新启动操作系统,几秒内能关闭。

**2.代码管道化管理 **
对代码以流式pipeline管道化进行管理,从开发者的机器到生产环境机器这个流程中都能有效管理。
Docker提供了跨越异构环境以一致性的微环境,从开发到部署实现流畅发布。

**3.应用隔离、网络建模、开发生产化、服务合并 **
多个应用服务部署在多个Docker中相互隔离,
可在一台机器上启动数百个(甚至数千个)相互隔离的容器,对网络进行建模。
单机上最大程度模拟生产分布式部署的环境
Docker能合并多个服务,不多的操作系统内存占用,跨实例共享多个空闲的内存。

二、基本操作

2.1、Linux安装Docker

  1. # yum 包更新到最新
  2. sudo sudo yum update
  3. # 下载关于Docker的依赖环境
  4. sudo yum -y install yum-utils device-mapper-persistent-data lvm2
  5. # 设置镜像下载Docker的镜像源
  6. sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  7. # 安装Docker
  8. sudo yum makecache fast
  9. sudo yum -y install docker-ce
  10. # 查看docker版本,出现输入的界面都按 y
  11. docker -v

2.2、Docker启动、停止

  1. # 启动docker:
  2. systemctl start docker
  3. # 停止docker:
  4. systemctl stop docker
  5. # 重启docker:
  6. systemctl restart docker
  7. # 查看docker状态:
  8. systemctl status docker
  9. # 开机启动:
  10. systemctl enable docker
  11. # 设置开机自动启动
  12. systemctl enable docker
  13. # 测试
  14. docker run hello-world
  15. # 查看docker概要信息
  16. docker info
  17. # 查看docker帮助文档
  18. docker --help

2.3、镜像操作

  1. # 拉取镜像到本地 例:docker pull centos:7
  2. docker pull 镜像名称 (在hub.docker.com(官方docker镜像仓库)右侧有拉取镜像的地址)
  3. # 查看全部本地镜像
  4. docker images
  5. # 删除本地镜像1
  6. docker image rm 镜像id
  7. # 删除所有镜像
  8. docker rmi `docker images -q`
  9. # 修改镜像名称
  10. docker tag 镜像id 新镜像名称:版本

2.4、容器操作

  1. # 进入容器 例:docker exec -it haoshun /bin/bash
  2. docker exec 参数 容器id或者容器名 /bin/bash # 退出容器,容器不会关闭
  3. # 查看所有容器
  4. docker ps a
  5. # 查看正在运行的容器
  6. docker ps
  7. # 查看最后一次运行的容器
  8. docker ps l
  9. # 查看停止的容器
  10. docker ps -f status=exited
  11. # 格式化查看
  12. docker ps -a --format "table {{.Image}}\t{{.ID}}\t{{.Ports}}\t{{.Names}}"
  13. # 启动容器:
  14. docker start 容器名称(或者容器ID
  15. # 停止容器:
  16. docker stop 容器名称(或者容器ID
  17. # 删除容器:如果是运行状态则删除失败,需要停止容器才能删除
  18. docker rm 容器名称或者容器id
  19. # 交互式方式创建容器
  20. docker run -it --name=容器名称 镜像名称:标签 /bin/bash
  21. # 守护式方式创建容器:
  22. docker run -di --name=容器名称 镜像名称:标签
  23. # 登录守护式容器方式:
  24. docker exec -it 容器名称 (或者容器ID) /bin/bash
  25. # 容器保存为镜像 容器ID 镜像名称:版本
  26. docker commit mynginx mynginx_i
  27. # 镜像备份 将镜像保存为tar 文件
  28. docker save -o mynginx.tar mynginx_i
  29. # 镜像恢复与迁移 先删除掉mynginx_img镜像 然后执行此命令进行恢复
  30. docker load -i mynginx.tar
  31. # 配置数据卷 例:docker run -it --name=test2 -v /vagrant/test_data2:/home/test_data2:/home/test_data3 ubuntu:16.04
  32. docker run ... -v 宿主机目录(文件):容器内目录(文件)...
  33. # 退出当前容器
  34. exit

2.5、Docker私有仓库

  1. # 拉取私有仓库镜像 registry镜像搭建属于我们自己的私有仓库
  2. docker pull registry
  3. # 从私有仓库拉取镜像
  4. docker pull 私有仓库服务器ip:5000/centos:7
  5. # 启动私有仓库容器
  6. docker run -di --name=registry -p 5000:5000 registry

2.6、简单应用部署示例

  1. MySQL部署
  2. # 拉取mysql镜像
  3. docker pull centos/mysql-57-centos7
  4. # 创建容器
  5. docker run -di --name=tensquare_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
  6. tomcat部署
  7. # 拉取镜像
  8. docker pull tomcat:7-jre7
  9. # 创建容器 -p表示地址映射
  10. docker run -di --name=mytomcat -p 9000:8080
  11. -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7
  12. Nginx部署
  13. # 拉取镜像
  14. docker pull nginx
  15. # 创建Nginx容器
  16. docker run -di --name=mynginx -p 80:80 nginx
  17. Redis部署
  18. # 拉取镜像
  19. docker pull redis
  20. # 创建容器
  21. docker run -di --name=myredis -p 6379:6379 redis

三、高级应用

3.1、搭建主从 MySql

3.1.1、安装主从 Mysql 、修改配置文件

1.安装

  1. 安装主从 Mysql 、修改配置文件
  2. # docker内部安装vim
  3. apt-get updateapt-get install vim
  4. # 下载8.0.19版本:
  5. docker pull mysql:8.0.19
  6. # 查看mysql镜像:
  7. docker images
  8. ## docker容器是相互隔离的,容器有独立IP,不同容器用相同的端口不会冲突
  9. # 启动 Master 容器
  10. docker run -p 3306:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=12345678 -d mysql:8.0.19
  11. # 启动 Slave 容器
  12. docker run -p 3307:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=12345678 -d mysql:8.0.19
  13. # 查看 MySql 运行情况
  14. docker ps -a

**2.改配置文件 **

  1. # 进入到Master容器内部,使用容器ID或者名称均可:
  2. docker exec -it 8b71301f25ed /bin/bash //8b71301f25ed为容器ID
  3. docker exec -it mysql-master /bin/bash //mysql-master为容器名称
  4. # 切换到 /etc/mysql 目录下

  1. # 编辑 master的 my.cnf文件
  2. vim my.cnf
  3. [mysqld]
  4. ## 同一局域网内注意要唯一
  5. server-id=100
  6. ## 开启二进制日志功能,可以随便取(关键)
  7. log-bin=master-bin
  8. binlog-format=ROW // 二级制日志格式,有三种 row,statement,mixed
  9. binlog-do-db=数据库名 //同步的数据库名称,如果不配置,表示同步所有的库
  10. # 退出docker容器 重启 mysql-master
  11. docker restart mysql-master
  12. # 编辑 slave 的 my.cnf文件
  13. vim my.cnf
  14. [mysqld]
  15. ## 设置server_id,注意要唯一
  16. server-id=101
  17. ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
  18. log-bin=mysql-slave-bin
  19. ## relay_log配置中继日志
  20. relay_log=mysql-relay-bin
  21. read_only=1 ## 设置为只读,该项如果不设置,表示slave可读可写
  22. # 退出docker容器 重启 mysql-slave
  23. docker restart mysql-slave

3.1.2、开启Master-Slave主从复制

1.查看Master的信息

  1. # 进入Master库mysql客户端:查看Master状态,记住File、Position
  2. show master status

  1. # 容器id查询容器的IP进行查询:
  2. docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master

2.Slave 连接 Master

  1. # 进入到Slave库myslq客户端,执行命令。
  2. change master to master_host='172.17.0.2', master_user='root', master_password='12345678', master_port=3306, master_log_file='master-bin.000001', master_log_pos=3552, master_connect_retry=30;

master_host :Master库的地址,指的是容器的独立ip,可以通过
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称 | 容器id查询容器的IP进行查询:
master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

**3.查看 Slave 连接情况 **

  1. # 启动slave
  2. start slave
  3. # 查询slave
  4. show slave status \G;

3.2、极简版搭建私有仓库

  1. ##获取官方镜像
  2. [root@server1 ~]# docker pull registry
  3. [root@server1 ~]# docker images registry
  4. ##以该镜像为基础,启动容器
  5. [root@server1 ~]# docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry
  6. ##上传镜像(需要先更改镜像名称,以指定上传的仓库)
  7. [root@server1 ~]# docker tag webserver:latest localhost:5000/webservr:latest
  8. [root@server1 ~]# docker push localhost:5000/webservr ##上传
  9. ##查看挂载的地址
  10. [root@server1 ~]# tree /opt/registry
  11. ##查看所挂载的镜像
  12. [root@server1 ~]# curl localhost:5000/v2/_catalog
  13. ## 向私有仓库上传、下载镜像
  14. #1.docker tag重命名需要上传的镜像
  15. docker tag IMAGE 服务器IP:端口/IMAGE_NAME
  16. # 2.docker push上传刚刚重命名的镜像
  17. docker push 服务器IP:端口/IMAGE_NAME

3.3、数据卷的使用

  1. # docker run -it -v/宿主机绝对路径目录:/容器内目录镜像名
  2. docker run -it -v /myDataVolume:/dataVolumeContriner centos:centos7.8.2003 / bin/bash

docker inspect 容器ID,查看容器内部细节,可看到这两个目录绑定成功

3.4、docker-compose管理工具

可避免手动编写一堆 docker run 命令,用一个配置文件来定义整个应用的服务。

3.4.1、安装

  1. # 1.用 pip 安装
  2. sudo pip install docker-compose
  3. # 2.linux上进行命令下载安装
  4. sudo curl -L "https://github.com/docker/compose/releases/download/{version}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  5. # curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-uname -s-uname -m > /usr/local/bin/docker-compose
  6. # 授权 Docker Compose 二进制文件:
  7. sudo chmod +x /usr/local/bin/docker-compose
  8. # 验证 Docker Compose 是否正确安装:
  9. docker-compose --version

3.4.2、使用

  1. 1.编写 Docker Compose 文件
  2. version: '3'
  3. services:
  4. web:
  5. build: .
  6. ports:
  7. - "5000:5000"
  8. volumes:
  9. - .:/code
  10. depends_on:
  11. - redis
  12. redis:
  13. image: "redis:alpine"
  14. 使用命令
  15. # 启动应用
  16. docker-compose up
  17. # 后台运行,则可以加上 -d 参数:
  18. docker-compose up -d
  19. # 查看 Docker Compose 应用的状态
  20. docker-compose ps
  21. # 停止应用
  22. docker-compose down
  23. # 查看配置命令
  24. # docker compose config# 构建并后台启动
  25. # docker compose up -d# 将会停止UP命令启动的容器,并删除容器
  26. # docker compose down #重新启动nginx容器
  27. # docker compose restart # 启动已存在的容器命令
  28. # docker compose start# 停止正在运行的容器命令
  29. # docker compose stop#暂停容器
  30. # docker compose pause # 恢复容器
  31. # docker compose unpause# 构建镜像
  32. # docker compose bulid# 下载镜像
  33. # docker compose pull# 删除容器
  34. # docker compose rm # 查看运行的镜像
  35. # docker compose ps# 查看进程
  36. # docker compose top# 查看服务日志输出
  37. # docker compose logs
标签: docker 容器 运维

本文转载自: https://blog.csdn.net/weixin_42679286/article/details/132859778
版权归原作者 JunSouth 所有, 如有侵权,请联系我们删除。

“Docker 的使用”的评论:

还没有评论