Docker笔记摘要

Docker笔记摘要

容器(docker)技术的价值

  1. 保证环境一致性,只要使用相同镜像部署就可以保证一致性
  2. 轻量级虚拟化访问,运行更快,资源更小.同时也可以荣期间的个开心
  3. 封装部署的负载类型,云原生与微服务的首选技术方案
  4. 未来测试人员必学的技术栈

Docker的学习路线

  1. 学习docker基本命令
  2. 学习使用Docker搭建常用软件
  3. 学习Docker网络模式
  4. 学习Docker的镜像制作(dockerfile)
  5. 容器集群-k8s的学习

Docker安装

  1. 切换管理权限
    su root
  2. 安装Docker依赖
    yum install -y yum-utils device-mapper-persistent-data lvm2
  3. 配置依赖下载源
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  4. 安装docker
    yum makecache fast && yum -y install docker-ce
  5. 检查docker状态为loaded
    systemctl status docker

Docker启动命令

启动: systemctl start docker
重启: systemctl restart docker
开机自启动: systemctl enable docker
运行状态: systemctl status docker

修改镜像仓库源

添加registry-mirrors
vim /etc/docker/daemon.json

{
“registry-mirrors”: [“https://registry.docker-cn.com”]
}

重载docker的配置文件
systemctl daemon-reload

重启docker
systemctl restart docker

查看配置
docker info

Docker常用的容器管理命令

  • 运行容器
    docker run --name={your_name} --d {image_name}
    -d 表示该容器启动起来之后不随着命令的停止而停止

  • 查看docker容器
    docker ps 仅查看正在运行的
    docker ps -a 用于查看所有的容器,包括停止的

  • 停止容器
    docker stop {container_name}

  • kill容器
    docker kill {container_name}

  • 删除容器
    docker rm -f {container_name}

  • 查看容器日志
    docker logs -f {container_name}
    -f 表示持续输出日志,否则输出最新的日志后马上停止

  • 查看容器的元数据
    docker inspect {container_name}

  • bash进入容器
    docker exec -it {container_name}

  • 按照名称去查询镜像
    docker search {image_name}

  • 拉取镜像
    docker pull {image_name}

  • 查看镜像仓库

    docker images

Docker常用的镜像管理命令

  • 拉取镜像
    docker pull {image_name}
  • 推送镜像
    docker push {image_name}
  • 查看当前机器所有的镜像
    docker images {image_name}
  • 为镜像打一个tag
    docker tag {source_image_name:tag your_image_name:tag}
  • 保存镜像为tar,用于以普通文件传输
    docker save busybox > busybox.tar
  • 装载tar镜像到仓库中,用于以文件形式接收镜像
    docker load < busybox.tar.gz

一行命令启动nignx

  • 启动容器并映射端口

    docker run -d -p 5003:80 --name mynginx nginx

  • 启动容器并映射端口和映射文件
    docker run -d -p 5003:80 -v “$PWD/html”:/usr/share/nginx/html --name mynginx nginx

    备注: 如果服务器在阿里云上,这需要通过"安全组" ==> “入方向” ==> "手动添加"来添加宿主机的端口

启动软件实例

一行命令启动Mysql

docker run --name fjc-mysql -v /home/test/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1qaz9ol. -p 8888:3306 -d mysql:5.5

一行命令启动Jenkins

docker run --name myjenkins -itd -p 5004:8080 -p 50000:50000 --restart always --privileged=true --user root --env JAVA_OPTS=“-Xmx8192m” -v $(pwd)/jenkins_data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v /bin/docker:/bin/docker jenkins/jenkins:lts

一行命令启动Jira

docker run -v “$PWD”/jira:/var/atlassian/application-data/jira --name=“jira” -d =p 5005:8080 atlassian/jira-software

一行命令启动testlink

docker run --name mariadb -e ALLOW_EMPTY_PASSWORD=yes -e MARIDB_USER=bn_testlink -e MARIADB_DATABASE=bitnami_testlink -v /home/mysql:/var/lib/mysql -p 8088:3306 bitnami/mariadb:latest

docker run -d --name testlink -p 5006:8080 -p 444:443 -e ALLOW_EMPTY_PASSWORD=yes -e TESTLINK_DATABASE_USER=bn_testlink -e TESTLINK_DATABASE_NAME=bitnami_testlink --link mariadb bitnami/testlink:latest

虚拟机和容器的区别

虚拟机:
server -> Host OS -> Hypervisor -> (Guest OS - > Bins/Libs -> App)

容器:
server -> Host OS -> Docker Engine -> (Bins/Libs -> App)

Docker的网络

网桥模式: 通过网口映射

host模式: 容器直接使用主机的网络

container模式: 使用–link,但是有缺陷,即只能在同一台虚拟机中, k8s中的容器都是用container模式启动的

Docker Compose

一个简单的容器编排工具,相关命令:
docker-compose up -d
docker-compose stop
docker-compose rm
docker-compose logs -f
docker-compose down
docker-compose ls

镜像介绍

一堆文件的集合

Docker容器镜像制作命令

相关命令

  • docker commit
  • docker file

使用docker commit命令制作

docker commit {容器名称} {新的镜像名称如myjenkins:V10}

使用docker file命令制作

相关命令

命令说明
FROM基于哪个镜像来实现,创建多个镜像时,可以使用多个FROM
EXPOSE容器内应用可使用的端口
COPY用于从docker 主机复制新文件或者目录至创建的新镜像指定路径中
CMD容器启动后所执行的程序,如果使用docker run后面跟启动命令会被覆盖,格式:CMD [“可执行程序”,“参数1”,“参数2”]
ENV指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。
RUN用于指定docker build过程中运行的程序,其可以是任何命令
ADD添加宿主机文件到容器里,有需要解压的文件会自动解压
MAINTAINER镜像的创建者
WORKDIR为后续的 RUNCMDENTRYPOINT 指令配置工作目录。
VOLUME将宿主机的目录挂到容器里,-v
ENTRYPOINT配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。指定多个时,最后一个生效
USER指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。
ONBUILD配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。
LABElLABEL用于为镜像提供元数据信息,其数据格式为key=value。

参考博客: https://www.cnblogs.com/Insa/p/14660976.html

Docke私有镜像仓库操作

docker pull registry:2
docker run -d -p 5000:5000 -v /usr/local/registry:/var/lib/registry --restart=always --name registry registry:2
docker pull busybox
docker tag busybox localhost:5000/busybox:v1.0
docker push localhost:5000/busybox:v1.0
curl http://localhost:5000/v2/_catalog

Docker底层原理

Cgroups

cgroup是Linux用来限制进程使用资源的手段.容器也是利用这个技术进行资源的隔离
mount -t cgroups查看当前系统的cgroups

容器的故障注入

使用docker inspect 命令查询当前容器的PID
使用nsenter -t pid -n 切换到容器的网络名称空间
使用iptables/tc等命令进行故障注入

  1. docker ps查看容器名称
  2. docker inspect {容器名称},然后查看state下面的PID,并记录
  3. cd /proc/{PID}/ns 即可看到具体的信息
  4. 使用nsenter -t {PID} -n 即可切换到{PID}对应的命名空间
  5. 使用故障注入命令注入网络故障,比如ifdown, iptable等命令注入

镜像分层设计

  • 每个镜像都是有多个层组成的.每一层都可以复用
  • 编写docker时可以利用分层缓存的特点加速镜像开发过程

如果有Dockerfile中有多条命令,相对来说说,会影响容器性能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值