Docker-compose简介

Docker-compose 是用于定义和运行多容器的 Docker 应用程序的工具。通过 Compose,可以使用 YAML 文件来配置应用程序的服务。

Linux下安装Docker-compose

https://github.com/docker/compose/releases

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

更改权限:chmod +x /usr/local/bin/docker-compose
查看版本:docker-compose version

Docker-compose常用命令

  • 查看配置:docker-compose config
  • 后台启动:docker-compose up -d
  • 停止并删除容器、网络、卷、镜像: docker-compose down
  • 构建镜像:docker-compose build
  • 下载镜像:docker-compose pull
  • 展示当前docker-compose编排过的运行的所有容器:docker-compose ps
  • 进程:docker-compose top
  • 查看配置:docker-compose config
  • 启动:docker-compose start
  • 停止:docker-compose stop

Docker-compose.yml示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
version: "3"

service:
# 下面的配置等价于
# docker run -d -p 6001:6001 -v /app/microService:/data --network atguigu_net --name ms_01 docker_image:1.6
microService:
image: docker_image:1.6
container_name: ms_01
ports:
- "6001:6001"
volumes:
- /app/microService:/data
networks:
- atguigu_net
depends_on:
- redis
- mysql

redis:
image: redis:6
ports:
- "6379:6379"
volumes:
- /app/redis/redis.conf:/etc/redis/redis.conf
networks:
- atguigu_net
command: redis-server /etc/redis/redis.conf

mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: '123456'
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
MYSQL_DATABASE: 'db123'
MYSQL_USER: 'william'
MYSQL_PASSWORD: '123456'
ports:
- "3306:3306"
volumes:
- /app/mysql/mysql.conf:/etc/mysql/mysql.conf
networks:
- atguigu_net
command: --default-authentication-plugin=mysql_native_password # 解决外部无法访问
networks:
atguigu_net:

Docker常用命令

1.docker pull 镜像名称:镜像标签 拉取镜像
2.docker run 运行镜像

  • –rm 容器停止之后立即删除容器
  • -i 表示运行容器
  • -it 运行之后进入到交互模式
  • –name xxx 给容器进行命名
  • -e 配置环境变量
  • -d 后台运行
  • -p 33060:3306 将本地的33060端口映射到容器内部的3306端口
  • -v 本地路径:容器内部的路径 将本地的目录映射到容器内部
  • –privileged=true 解决挂载目录没有权限的问题
  • –network 网络组名称 容器之间进行相互通信
  • –privileged 使用该参数,container内的root拥有真正的root权限。
    否则,container内的root只是外部的一个普通用户权限。

3.docker ps 查看正在运行的容器
4.docker ps -a 查看所有的容器
5.docker logs 容器名称/容器id 查看启动日志
6.docker exec -it 容器名称/容器id bash 进入容器的内部
7.docker inspect 容器名称/容器id 分析容器的具体信息
8.docker run -d bash -c ‘要执行的命令1 && 要执行的命令2’ 运行镜像后要执行的命令(注意:启动dockerfile构建的镜像时在后面加上bash -c ‘要执行的命令1 && 要执行的命令2’,会忽略掉dockerfile中CMD的内容)
9.docker cp 本地的文件目录 镜像名称:镜像目录 ——将本地的文件拷贝到容器内
10.docker inspect 容器名称——查看容器的ip地址
11.docker load -i 镜像压缩文件——将压缩文件加载为docker镜像

镜像管理

1、docker images 查看所有镜像
2、docker search 镜像名 搜索镜像
3、docker pull 镜像名:版本号 拉取镜像
4、docker history 镜像名 查看镜像创建历史
5、docker rmi 镜像名:标签 删除镜像
6、docker tag busybox:latest busybox:test 更改镜像名

Docker镜像构建

一、Dockerfile参数详解

  • FROM –依赖于哪些镜像
  • WORKDIR –指定工作的上下文
  • COPY –把一些文件或目录添加到镜像中
  • RUN –要运行的相关命令
  • CMD –最后要运行的指令
  • ENV key value –设置环境变量
  • ADD –将本地的文件复制到镜像内部(如果是一个压缩文件,将会在复制后自动解压)
  • COPY –与ADD相似(但是如果复制的是压缩文件,不会自动解压)

二、docker build参数详解

  • -t:为构建的镜像设置标签
  • –build-arg:传递构建参数到Dockerfile中
  • -f:指定要使用的Dockerfile的名称,如果文件名默认叫做dockerfile可以不用写
  • –network:指定构建时使用的网络配置
  • –no-cache:忽略缓存,强制重新构建镜像
  • –pull:在构建之前尝试拉取最新的基础镜像
  • –target:指定构建过程中的目标阶段

docker build官方文档:https://docs.docker.com/engine/reference/builder/

docker网络组的使用

当你在Docker中使用网络组时,可以通过以下简单的例子来理解其作用。假设你有两个容器,一个运行Web应用程序,另一个运行数据库服务。

首先,创建一个网络组:

1
docker network create mynetwork

接下来,运行一个容器并将其连接到这个网络:

1
docker run --name webapp --network mynetwork -d -p 8080:80 your-webapp-image

这会运行一个名为 “webapp” 的容器,将其连接到 “mynetwork” 网络,并将容器的端口 80 映射到主机的端口 8080。

然后,运行另一个容器,比如一个运行数据库的容器,并将其连接到相同的网络:

1
docker run --name database --network mynetwork -d -e MYSQL_ROOT_PASSWORD=password your-db-image

现在,你有两个容器运行在同一个网络中。它们可以通过容器名称相互通信,而无需关心它们各自的 IP 地址。

例如,在Web应用程序容器中,你可以配置数据库连接为:

1
mysql -h database -u root -p

这里,”database” 是另一个容器的名称,Docker网络组的内置 DNS 服务会将其解析为相应的 IP 地址。
通过这种方式,你可以轻松地创建多个容器,使它们能够在同一个网络中相互通信,而不受主机网络或其他容器的影响。这种隔离和组织方式使得构建和管理复杂的应用程序更为灵活和方便。

Docker简介

Docker 起源于 2013 年。Docker 是一个开源的应用容器引擎,基于 Go 语言开发,Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的系统

Docker优点

  • Docker 可以用来快速交付应用。加快打包时间,加快测试,加快发布,缩短开发及运行代码之间的周期。
  • 复杂环境管理,应用隔离:不同软件运行环境兼容依赖问题,开发环境/测试环境/线上环境保持一致。
  • 轻量级:对于系统内核来说,一个 docker 只是一个进程,一个系统可以运行上千个容器。

Docker与虚拟机的区别

  • 容器与容器之间只是进程的隔离,而虚拟机是完全的资源隔离。
  • 虚拟机的启动可能需要分钟级别,Docker 启动是秒级或者更短。
  • 容器使用宿主操作系统的内核,而虚拟机使用完全独立的内核。

Docker架构

centos下安装Docker

1
2
3
4
5
6
7
# 安装 Docker 依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
# 配置依赖下载源
yum-config-manager --add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装 docker
yum makecache fast && yum -y install docker-ce

Docker配置阿里镜像源

https://cr.console.aliyun.com/cn-guangzhou/instances/mirrors(阿里云镜像加速地址获取)

1
2
3
4
5
6
7
8
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["这里替换成自己的加速地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Docker容器介绍

容器是您机器上的沙盒进程,与主机上的所有其他进程隔离。这种隔离利用了内核命名空间和 cgroups,这些特性已经在 Linux 中存在了很长时间。 Docker 致力于使这些功能变得平易近人且易于使用。总而言之,一个容器: 是图像的可运行实例。您可以使用 DockerAPI 或 CLI 创建、启动、停止、移动或删除容器。 可以在本地机器、虚拟机上运行或部署到云端。 是可移植的(可以在任何操作系统上运行)。 与其他容器隔离并运行自己的软件、二进制文件和配置。

图片描述

docker官网

前置说明:假设现在打开一个网页,需要点击页面中的元素跳转到另一个页面,这个时候可能会出现页面没有渲染完成导致点击失败


这里拿企业微信做一个例子,现在我处于协作模块,我需要点击进入应用管理,假设浏览器打开页面后页面没有渲染完成导致我点击应用管理失败,这个时候我们可以通过显示等待的高级用法(使用复杂行为解决点击不生效的问题)。我们可以找到应用管理页面中特定元素来判断是否点击成功,我们可以看见应用管理页面中有一个微信客服的元素,那么我们可以通过selenium显示等待的高级用法进行循环点击。

1
2
3
4
5
def loop_click(driver):
self.driver.click(By.XPATH, "//span[text()='应用管理']/parent::a")
return len(self.driver.find_elements(By.XPATH, "/div[text()='微信客服']")) > 0

WebDriverWait(self.driver, 10).until(loop_click)

这里我们我们将点击应用管理的操作写在了loop_click的函数内,并且在函数的return中定义了判断结果,如果应用管理页面的元素一旦出现则loop_click函数就会返回true,证明元素点击成功。当应用管理页面的元素一直没有出现,那么len(self.driver.find_elements(By.XPATH, “/div[text()=’微信客服’]”)) > 0就会一直为false,则在显示等待设定的时间内会一直执行loop_click函数从而达到循环点击的作用。

0%