docker

261 阅读3分钟

文档

测试人员的应用场景

  1. 搭建测试环境
  2. 搭建各类基础服务 (比如用例管理、流程管理等的软件)
  3. 搭建测试执行环境 (本地自动化代码环境)

docker和虚拟机的区别

  1. docker不虚拟化内核

docker的关键技术

  1. Namespace
  2. 联合文件系统
  3. Cgroups

docker常用命令

  1. 拉取镜像

    docker pull [image_name]

  2. 推送镜像

    docker push [image_name]

  3. 查看所有镜像

    docker image ls

  4. 删除镜像

    docker rmi [image_name] or docker rmi [container_id]

  5. 为镜像打tag

    docker tag {source_images_name:tag your_image_name:tag}

  6. 将一个镜像保存为.tar文件

    docker save [image] > [image].tar

    eg:docker save jenkins/jenkins > jenkins.tar

  7. 将一个.tar文件转为镜像

    docker load < jenkins.tar

  8. 运行容器

    docker run -d --name={your_name} -p {port}:{port} -e TZ=Asia/Shanghai [image]

    -d: 后台运行
    {your_name}: 容器名称
    -p: 暴露端口;第一个port为外网可访问的端口,第二个port为容器内部的端口
    -e: TZ=Asia/Shanghai,设置时区为东八区

  9. 查看当前所有容器
    docker ps -a
    -a: 显示停止中的容器

  10. 停止容器
    docker stop [container_name] or docker stop [container_id]

  11. 杀死容器
    docker kill [container_name] or docker kill [container_id]

  12. 删除容器
    docker rm -f [container_name] or docker rm -f [container_id]
    -f: 强制删除容器,可以直接删除运行中的容器

  13. 重启容器(重新启动正在运行启动中的容器)
    docker restart [container_name] or docker restart [container_id]

  14. 启动容器(处于停止中的容器)
    docker start [container_name] or docker start [container_id]

  15. 进入容器命令
    docker exec -it [container_name] bash or docker exec -it [container_id] bash

  16. 修改容器配置
    docker cp [container_name]:[container_path] [host_path] 把容器的文件拷贝到宿主机中

    eg: docker cp laradock_mysql_1:/etc/test.txt /Downloads/


    docker cp [host_path] [container_name]:[container_path] 把宿主机的文件拷贝到容器中

    eg: docker cp /Downloads/test.txt laradock_mysql_1:/etc

  17. 一个容器的生命周期可涉及到的命令

    // -d表示后台启动,-p 表示暴露端口;创建一个名字为myjenkins的jenkins容器,其暴露的端口为8080
    1. docker run -d --name=myjenkins -p 8080:8080 jenkins
    
    // 停止容器名为myjenkins容器
    2. docker stop myjenkins 
    
    // 启动一个名为myjenkins的处于停止中的容器
    3. docker start myjenkins
    
    // 删除名为myjenkins的容器
    4. docker rm myjenkins
    

docker使用事例

  1. 启动mysql
# 拉取官方5.6版本的mysql镜像(若不加上版本号表示拉取最新的)
docker pull mysql:5.6
# docker image ls 可以查看已经拉取的镜像
# 启动一个mysql镜像
docker run -d --name local_mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai \
--mount type=bind,source="$(PWD)"/data,target=/var/lib/mysql  mysql:5.6 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --explicit_defaults_for_timestamp=false

docker run -d --name my_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai mysql:5.6  --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

注:一定要指定密码,时区、字符集,是否要将数据持久化到本地,可根据需要处理

-e MYSQL_ROOT_PASSWORD=123456 指的是密码
-e TZ=Asia/Shanghai 表示时区
--character-set-server=utf8mb4 和 --collation-server=utf8mb4_unicode_ci 表示字符集

# 在容器内使用mysql命令
登陆:mysql -u [user] -p 
eg: mysql -u root -p
  1. 启动redis
# 拉取官方镜像
docker pull redis
# 启动一个redis镜像
docker run -d --name my_redis -p 6379:6379 redis
  1. 启动rabbitmq
# 拉取官方镜像
docker pull rabbitmq
# 启动一个rabbitmq镜像
docker run -d --name my_rabbitmq -p 5672:5672 rabbitmq

docker定制镜像

  1. 创建目录:mkdir my_nginx
  2. my_nginx下执行touch Dockerfile
  3. 编辑Dockerfile内容
    FROM nginx
    RUN echo '<h1>hello,Docker!</h1>' > /usr/share/nginx/html/index.html
    CMD echo 'hello world'
    
  4. 在Dockerfile目录下执行docker build -t my_nginx:v3 .;创建名为my_nginx,tag为v3的镜像
  5. 运行镜像 docker run my_nginx:v3,结果会打印出hello world

dockerfile编写

1.常用指令

  • From:镜像源
  • WORKDIR:工作目录
  • COPY:将指定目录复制给容器的指定目录
  • RUN:运行时执行的命令
  • EXPOSE:暴露的端口
  • ENV:指定环境变量
  • ARG:构建时才有效的参数
  • CMD:运行时才有效的命令