docker的使用笔记
前言
最近在负责一个基于airtest的游戏UI自动化压测项目,需求大概是达到单服同时在线1500人并在游戏中做主线大约30分钟。
在完成项目的过程中,遇到了linux连接大量adb会导致连接不稳定,继而大量地断开连接。
为了提高adb连接的稳定性,引入了docker。
因此在这里记录配置docker时使用到的部分指令(虚拟机为centos系统)。
Docker的安装
yum安装docker
yum -y install docker
安装后重载下daemon
systemctl daemon-reload
service docker restart
Dockerfile的配置
简单来说dockerfile是用来创建docker镜像的依赖文件,它的内容里的指令必须为大写,以下,便是一个创建自带adb/python/jdk的镜像的dockerfile。
我们在大部分时间,最好是直接利用dockerfile将docker image环境直接配置好,只需要启动image就能直接执行我们的脚本
FROM centos:7.2.1511
# 安装依赖包,最好在yum -y isntall前加上rpm -rebuilddb以免出现报错
RUN yum -y install libffi-devel
RUN yum -y install zlib zlib-devel
RUN yum -y install make
RUN rpm -rebuilddb && yum -y install openssl-devel
RUN rpm -rebuilddb && yum -y install gcc unzip
RUN rpm -rebuilddb && yum -y install java-1.8.0-openjdk.x86_64
RUN rpm -rebuilddb && yum -y install ncurses-libs.i686 libgcc.i686
# 创建必要的文件夹
RUN mkdir /home/software
RUN mkdir /opt/python3
RUN mkdir /opt/adb
# 把文件复制到docker镜像中
ADD Python.tgz /home/software
ADD requirements.txt /home/software
ADD platform-tools_r23.0.1-linux.zip /opt/adb
ADD sdk-tools-linux-3859397.zip /opt/adb
# 安装python3.7.6
WORKDIR /home/software/Python-3.7.6
RUN ./configure --prefix=/opt/python3
RUN make && make install
# 创建python3、pip3的超链接
RUN ln -s /opt/python3/bin/python3 /usr/local/bin/python3
RUN ln -s /opt/python3/bin/pip3 /usr/local/bin/pip3
# 安装python3的某些库
RUN pip3 install -r /home/software/requirements.txt -i https://pypi.doubanio.com/simple
# add不会自动解压zip文件,因此我们需要手动解压
WORKDIR /opt/adb
RUN unzip platform-tools_r23.0.1-linux.zip
RUN unzip sdk-tools-linux-3859397.zip
RUN rm -rf platform-tools_r23.0.1-linux.zip
RUN rm -rf sdk-tools-linux-3859397.zip
# 设置adb环境
RUN echo "export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL" >> /etc/profile
RUN echo "export PATH=$PATH:/opt/adb/tools/bin" >> /etc/profile
RUN echo "export PATH=$PATH:/opt/adb/platform-tools" >> /etc/profile
RUN source /etc/profile
# 创建启动docker所依赖的文件夹
RUN mkdir /home/stress
# 设置工作文件夹类似于cd /home/stress
WORKDIR /home/stress
# 启动时执行的指令
CMD python3 test.py
Docker的常用指令
image的创建,首先我们要Dockerfile所有在文件夹下,然后执行以下指令
docker build -t [name:version] .
# 实例,创建一个名为test的docker image,版本为v0
docker build -t test:v0 .
image的启动
docker run -it -v[sourcepath:targetpath] --cpuset-cpus="0" [name:version]
# 实例一,启动镜像test:v0,其只占用编号为0和1的cpu,且将/opt/test.py映射到镜像的/home/stress中,
# 启动时执行Dockerfile中预设的CMD
docker run -it -v/opt/test.py:/home/stress/test.py --cpuset-cpus="0,1" test:v0
# 实例二,启动镜像test:v0,其只占用编号为0到4的cpu,且将/opt/test.py映射到镜像的/home/stress中,
# 启动时不执行Dockerfile中预设的CMD
docker run -it -v/opt/test.py:/home/stress/test.py --cpuset-cpus="0-4" test:v0 /bin/bash
# 实例三,后台启动镜像test:v0,其只占用编号为0到4的cpu,且将/opt/test.py映射到镜像的/home/stress中,
# 启动时执行Dockerfile中预设的CMD
docker run -it -d -v/opt/test.py:/home/stress/test.py --cpuset-cpus="0-4" test:v0
docker查看当前正在运行的镜像
docker ps
docker查看历史运行的镜像
docker ps -a
docker进入正在运行的镜像
docker attach 镜像ID
docker查看所有镜像
docker images
docker删除镜像
docker rmi 镜像ID
docker删除所有历史运行的镜像
docker rm $(docker ps -a -q)
docker将镜像保存为新镜像,一般在对镜像内容有改动的情况下使用
docker commit 镜像ID [name:version]
# 实例,将镜像ID为342d13s0b的镜像保存为新镜像,名为test:v1
docker commit 342d13s0b test:v1
docker镜像保存到本地,一般用来转移镜像到别的虚拟机
docker save [name:version]>[filename]
# 实例,将test:v1保存到本地,文件名为test.rar(通常用.rar)
docker save test:v1>test.rar
docker从本地镜像文件中导入镜像
docker load<[filename]
# 实例,从本地导入镜像test.rar
docker load<test.rar