10.Docker 技术

一、 Docker 技术简介

1. docker 组成

  • 镜像:相当于python里面类的概念,是静态的,不能直接使用
  • 容器:是通过镜像创建的,相当于实例的概念,是动态的,可以访问的
  • 仓库:存放镜像的地方
  • docker宿主机:你的docker安装在哪一个机器,那个机器就是宿主机

2. docker 应用场景

  • web 应用的自动化打包和发布
  • 自动化测试和持续集成、发布
  • 在服务型环境中部署和调整数据库或其他的后台应用
  • 使用docker可以实现开发人员的开发环境、测试人员的测试环境、运维人员的生产环境的一致性

二、 CentOS 下安装 Docker

1. 版本检查

  • CentOS 7 以上版本
  • 操作系统centos-extras 库必须启用。默认情况下,此库是启用的,但是如果已禁用,则必须重新启动它
  • Docker 要求 CentOS 内核版本高于 3.10
1
2
3
# 查看系统版本

uname -r

2. 安装 Docker

1. 安装需要的软件包

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

  • yum-util 是 yum 仓库管理扩展工具包,即它提供了 yum-config-manager 功能
  • 另外两个是 devicemapper 驱动依赖的

2. 添加 yum 源

1
2
3
4
5
# 阿里云镜像仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 官网源镜像仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

  • 利用 yum-config-manager 添加yum仓库
  • 查看仓库 ll /etc/yum.repos.d

3.更新yum缓存

1
yum makecache fast

4.查看仓库中 docker 的版本

选择对应的版本安装,列出并排序存储库中可用的版本。按版本号(从高到低)对结果进行排序

1
yum list docker-ce --showduplicates | sort -r

5. 安装 docker

  1. 安装最新版本
1
yum install -y docker-ce
  1. 安装指定版本
1
2
3
yum install docker-ce-版本号

yum install docer-ce-17.12.1.ce

6. 验证是否安装成功

1
2
3
4
5
docker version
或者
docker -v

有client和service两部分标识docker安装并启动成功

image-20210722180548342

7. 启动docker

1
systemctl start docker
  1. 启动 : systemctl start docker

  2. 关闭 : systemctl stop docker

  3. 重启 : systemctl restart docker

8. 开机自动启动

1
systemctl enable docker

9. 查看docker运行状态

1
systemctl status docker

10. 关闭防火墙

1
2
3
systemctl stop firewalld 	# 临时关闭

systemctl stop disable # 永久关闭

三、Docker 镜像 加速(阿里云)

默认情况下,docker下载镜像是从官网下载,下载速度特别特别的慢。

使用阿里云加速器可以提升获取Docker官方镜像的速度 。

1. 阿里云 镜像 加速

每个账号的 镜像 加速 地址都不同

阿里云 —- 容器镜像服务 地址 https://cr.console.aliyun.com/cn-beijing/instances/mirrors

2. 在指定目录创建文件(如已存在请忽略此步)

1
vi /etc/docker/daemon.json

3. 修改文件内容

1
2
3
{
"registry-mirrors":["https://elk58vq5.mirror.aliyuncs.com"]
}

4. 重启 Docker 服务

1
systemctl restart docker

四、Docker 中安装镜像及操作

1. 获取 镜像

1. 查看 本地 镜像

1
docker images

2. 搜索 镜像

1
docker search tomcat

3. 拉取 最新 镜像

1
docker pull tomcat
  1. 拉取最新镜像 : docker pull tomcat
  2. 拉取指定镜像 : docker pull tomcat:7
  3. 删除镜像 : docker rmi 镜像id

4. 查看 拉取的 镜像

1
docker images

2. 创建 容器

1. 创建容器

根据tomcat镜像,创建一个myTomcat容器

1
docker create --name=myTomcat tomcat

2. 查看 容器

  • 查看运行的容器:
1
docker ps
  • 查看所有的容器:
1
docker ps -a

3. 运行 容器

1
docker start myTomcat

start 后面可以跟 容器的id(前2-3位) 或者 name

  • 停止 容器:

    1
    docker stop myTomcat
  • 删除 没有运行的 容器

    1
    docker rm 容器id或者名字
  • 删除 运行的容器

    1
    docker rm -f 容器ID或者名字
  • 删除所有容器

    1
    2
    3
    4
    5
    # 先停止所有的容器
    docker stop $(docker ps -a -q)

    # 删除
    docker rm $(docker ps -a -q)

3. 创建 容器的一些 操作

1. 搭建 web 项目

  1. 访问端口 你需要访问的是容器内部的端口
  2. war项目文件这么传递给容器里的tomcatwebapps

2. 创建 并 启动容器

docker run 后面的参数

  • -i :运行容器
  • -t : 容器启动后,进入命令行
  • -v : 目录映射 —- 挂载
    • -v 宿主机目录:容器目录
  • -d : 守护进程 —- 后台运行
  • -p : 端口映射
    • -p 宿主机端口:容器端口

创建容器,并且进入命令行—-进入容器

1
docker run -it --name=myTomcat tomcat/bin/bash

3. 创建 运行 一个守护的 容器

1
docker run -id --name=myTomcat2 tomcat

4. 进入容器

1
docker exec -it myTomcat2 /bin/bash

5. 退出容器

1
exit

4. 宿主机(服务器) 与 docker 容器的 文件传递

传递文件时,都需要在 宿主机 中输入命令

1. 宿主机 向 docker 容器 传递文件

1
2
3
# docker 拷贝 文件名 容器名称:拷贝路径

docker cp xt.txt myTomcat:/

2. docker 容器 向 宿主机 传递文件

1
2
3
# docker 拷贝 容器名称:文件名 拷贝路径

docker cp myTomcat:/文件名 /root

5. 访问 tomcat

1. 启动并作为守护进程

  • -p : 宿主机的端口:容器里应用的端口 —- 8080
  • -v : war挂载到宿主机 宿主机路径:容器路径(路径会新建)

创建并运行一个名为 myTomcat 的守护容器,端口为8080,war挂载到了宿主机的 /usr/local/tomcat/webapps 目录

1
docker run -id --name=myTomcat -p 8080:8080 -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps tomcat

把 war 包放到宿主机的 挂载目录里,直接刷新浏览器就可以出现项目的页面

2. 启动容器时关联其他容器

1
docker run -id --name=tomcat2 -p 8080:8080 --link mysql --link redis --link rabbitmq

五、 查看日志 ( docker logs 命令)

docker logs [options] 容器名称或ID 获取容器日志

名字默 认 值描述
–details显示提供给日志的额外细节
–follow或-f按日志输出
–since从某个时间开始显示,例如2013- 01-02T13:23:37
–tailall从日志末尾多少行开始显示
– timestamps 或-t显示时间戳
–until打印某个时间以前的日志,例如 2013-01-02T13:23:37
1
2
3
# 通过docker logs命令可以查看容器的日志。

docker logs -f --tail 10 a4dac74d48f7
1
2
3
# 查看指定时间后的日志,只显示最后100行:

docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID
1
2
3
# 查看某时间段日志

docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID

六、容器 图形化管理工具( Portainer )

1.查看portainer镜像

1
docker search portainer

2.选择喜欢的portainer风格镜像,下载

1
docker pull portainer/portainer

3.启动dockerui容器

1
docker run -id --name=portainer -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

4、浏览器访问 http://你虚拟机的ip:9000, 设置一个密码即可,点击创建用户 密码要8位以上

5、我们搭建的是单机版,进入页面直接选择Local ,点击连接

七、docker 旧版卸载

1. 卸载它们以及相关的依赖项

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

2. 安装 Docker Engine-Community

在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。

之后,您可以从仓库安装和更新 Docker。

1. 设置仓库

安装所需的软件包。

1
sudo yum install -y yum-utils \device-mapper-persistent-data \lvm2

使用以下命令来设置稳定的仓库。阿里云

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

2. 安装 Docker Engine-Community

1
sudo yum install docker-ce docker-ce-clicontainerd.io

一直输入y回车即可

3. 启动 docker

1
sudo systemctl start docker

八、 修改 容器的 映射端口及挂载目录

1. 停止容器

1
docker stop 容器id或名称

2. 停止 docker 服务

1
systemctl stop docker

3. 修改 hostconfig.json 文件

config,v2.json 中如果也记录了端口,需要一并修改

文件目录:

1
2
3
cd /var/lib/docker/containers/容器id

vi hostconfig.json

1. 修改 映射端口

没有端口映射时:“PortBindings”:{}

增加一个端口映射:

前面的 “3306” 为 容器端口, 后面的 “3307” 为宿主机端口

如果修改现有端口映射,则可以直接修改

1
“PortBindings”:{3306/tcp”:[{“HostIp”:"",“HostPort”:3307}]}

2. 修改 挂载目录

前面的地址为 宿主机挂载目录,后面的地址为 容器目录地址

1
"Binds":["/var/run/docker.sock:/var/run/docker.sock"

4. 启动 docker 服务

1
systemstl start docker

5. 启动 容器

1
docker start 容器id

6. 查看修改后的结果

1
docker ps -a

7. 查看修改后的挂载目录

1
docker inspect container_id | grep Mounts -A 20

九、 同步时间

1.查看宿主机时间

1
date

2. 安装 ntp

1
yum install ntp

3. 同步时间

1
docker cp /etc/localtime 容器id或名称:/etc/localtime

报错:

1
docker cp /usr/share/zoneinfo/Asia/Shanghai 容器ID或名称:/etc/localtime

4. 重启 容器

1
docker restart 容器id或名称

注意事项:

  • 可能网络会断开,请重新reboot下linux
  • 虚拟机的ip可能会改变