docker学习

docker学习

docker在Linux下安装

  1. 安装工具包 sudo yum -y install yum-utils device-mapper-persistent-data lvm2

  2. 设置仓库 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

  3. 安装 sudo yum -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin

  4. 设置开机启动 sudo systemctl start docker && sudo systemctl enable docker

  5. 设置用户权限 sudo usermod -aG docker $USER newgrp docker

  6. 检查服务状态 systemctl status docker

  7. 查看版本号 sudo docker version

  8. 运行一个image(镜像) sudo docker run hello-world

docker镜像源更换

  • cd /etc/docker

  • sudo tee /etc/docker/daemon.json <<-'EOF'

  • sudo systemctl daemon-reload

  • sudo systemctl restart docker

docker镜像管理

CH4 【官方文档

  1. 查看帮助

    docker --help

  2. 查看版本

    docker version

  3. 查看初始化信息

    docker info

  4. 列出本地镜像

    docker image ls

  5. 在仓库搜索镜像

    docker search centos --no-trunc --limit 5 --filter "is-official=true" (搜索含centos,不截断,前五行,official为true)

    仓库一般提供web api,得到镜像的列表 https://cdwvkc3j.mirror.aliyuncs.com/v2/_catalog?n=1

  6. 镜像下载 docker image pull alpine

  7. 查看镜像历史 docker image history alpine

  8. 给镜像加标签 docker image tag hello-world:latest myhelloworld:v0227

  9. 删除镜像

    docker image rm alpine

  10. 删除遗留的临时镜像文件,或未被使用的镜像

docker image prune

  1. 查看镜像的详细信息

    docker image inspect hello-world

  2. 导出镜像到本地

    docker image save -o hello-world.tar.gz hello-world

  3. 导出镜像

    docker image load -i hello-world.tar.gz

docker容器命令

  1. 创建容器,并不运行

    docker container create -i -t --name helloworld hello-world

  2. 列出容器,状态有【created,restarting,running,removing,paused,exited,or dead】

    docker container ls -a

  3. 删除容器

    docker container rm $(docker container ls -qa)

  4. 运行容器

    docker container run -it --name alpine2 alpine /bin/sh

  5. 在后台运行容器

    docker container run -d --name helloworld2 hello-world

    docker container run -idt --name alpine alpine /bin/sh

  6. 容器的启动/停止/暂停/重启

    docker container start alpine2

    docker container stop alpine2

    docker container pause alpine2

    docker container restart alpine2

  7. 运行一个新容器,并为其分配伪终端

    docker container run -idt --name alpine2 alpine

    以交互方式运行容器中的sh命令

    docker container exec -it alpine2 sh

    在容器中创建一个空文件

    docker container exec -d alpine2 touch /tmp/abc.txt

  8. 复制文件

    • docker container cp alpine:/tmp/mysqlpwd ./mysqlpwd1#从容器复制到主机

    • docker container cp ./mysqlpwd alpine:/tmp#从主机复制到容器

  9. 日志

    • docker container logs alpine

    • docker container run -itd --name hello hello-world

    • docker container logs hello

  10. 查看容器的详细信息 docker container inspect alpine

  11. 将容器打包构建成一个新的镜像

    docker container commit -a "inspur" -m "msg" alpine alpine0229:v1

  12. 导出容器

    docker container export -o alpine0229.tar alpine

  13. 查看容器的进程信息

    • docker container run -itd --name alpine alpine

    • docker container top alpine

  14. 修改容器的名称

    docker container rename alpine alpine-linux

  15. 删除所有已停止的容器

    docker container prune

  16. 强制关闭当前容器

    docker container kill alpine02281

  17. 查看容器文件系统的修改

    docker container diff alpine-linux

  18. 查看容器的端口

    docker container port alpine-linux

  19. 显示容器资源的使用情况

    docker container stats alpine-linux

docker仓库管理

  1. 搭建私有仓库

    docker image pull registry

    docker run -d -p 5000:5000 --restart always --name local-registry registry

  2. 推送镜像到仓库 docker image tag hello-world:latest localhost:5000/hello-world:1 docker image push localhost:5000/hello-world:1

  3. 通过API查看仓库的镜像 curl localhost:5000/v2/_catalog

  4. 从私有仓库下载镜像 docker image pull localhost:5000/hello-world:1

docker数据管理

  1. 创建数据卷

    docker volume create myvolume

  2. 查看数据库列表 docker volume ls

  3. 查看数据卷信息 docker volume inspect myvolume

  4. 运行容器时指定数据卷,使用-v docker container run --name alpine0301 -v -idt myvolume:/mydata alpine

  5. 如果之前数据卷不存在,则进行创建 docker container run --name alpine0301 -idt -v myvolume2:/mydata alpine

  6. 运行容器时指定数据卷,使用--mount docker container run --name alpine2 -idt --mount type=volume,target=/mydata,src=myvolume alpine

  7. 绑定挂载

    • docker container run -idt --name alpine -v /home/centos/abc/:/mydata alpine

    • docker container run -idt --name alpine2 --mount type=bind,target=/mydata1,src=/home/centos/abc,readonly alpine

  8. 创建数据卷容器

    • docker container run --name alpine --mount type=volume,target=/mydata,src=myvolume alpine

    • docker container run -it --volumes-from alpine alpine

  9. 数据卷容器的备份

    1. docker container run --name alpine --mount type=volume,target=/mydata,src=myvolume alpine

    2. 使用--volumes-from 引用上方数据卷容器alpine,挂载容器的数据卷(即/mydata); 使用-v $(pwd):/backup参数来挂载本地的当前目录到容器的/backup目录

      • docker container run --volumes-from alpine -v $(pwd):/backup alpine tar zcvf /backup/data.tar.gz /mydata

  10. 数据卷容器的还原

  • docker container run --name alpine3 --mount type=volume,target=/mydata,src=myvolume3 alpine

  • docker container run -v /home/centos/abc:/backup --volumes-from alpine3 alpine tar zxvf /backup/data.tar.gz -C /mydata

Dockerfile

Dockerfile命令

  • FROM:指定基础镜像,任何Dockerfile中的第一条指令必须为FROM指令,例如 FROM ubuntu:20.04。

  • MAINTAINER指令:指定镜像维护者信息,例如 MAINTAINER ZYD。

  • LABEL指令:指定生成镜像的元数据标签的信息,例如 LABEL version="1.0"。

  • RUN:运行指定Linux命令,每条RUN指令将在当前镜像的基础上执行指令命令,并生成新的镜像层,例如 RUN apt-get update && apt-get install -y gcc。

  • CMD:指定容器启动时要运行的命令,例如 CMD [“python”, “app.py”]。

  • EXPOSE:声明当前容器对外暴露出的端口号,例如 EXPOSE 80。

  • VOLUME指令:指定一个数据卷的挂载点,指定容器内的数据存储路径,主机数据卷默认挂载到/var/lib/docker/volumes/目录中,例如 VOLUME /etc/docker/app1。

  • ENTRYPOINT指令:指定镜像的默认入口命令,该入口命令会在启动容器时作为根命令执行。所有传入值作为该命令的参数。例如 ENTRYPOINT [“python”, “app.py”]。

  • WORKDIR:设置工作目录,例如 WORKDIR /app。

  • ENV指令:在构建镜像过程中指定环境变量,例如 ENV JAVA_HOME=/opt/jdk1.8.0_121。

  • ADD指令:将复制指定的<srt>路径下的内容到容器中的<dest>下,例如 ADD app.tar.gz /opt/

  • COPY:将文件从构建上下文复制到镜像内部,例如 COPY ./app /app。

  • ONBUILD指令:配置当所创建的镜像作为其他镜像的基础镜像时,所执行的创建操作指令,例如 ONBUILD RUN echo "copy success"。

  • USER指令:指定运行容器时的用户名或UID,例如 USER ZYD。

  • ARG指令:指定一些镜像内使用的参数(例如版本号信息等),这些参数在docker build命令时才以—build-arg <varname>=<value>格式传入。例如 ARG VERSION。

Dockerfile构建过程

1. 编写Dockerfile文件。注意(规则):
    1. 每条保留字指令都必须为大写字母,且后面要至少跟随一个参数;
    2. 指令按照从上到下,顺序执行;
    3. #表示注释
    4. 每条指令都会创建一个新的镜像层,并对镜像进行提交。
2. docker build构建镜像;
3. docker run启动容器

dockerfile构建示例1

vim Dockerfile1

FROM alpine:latest
ENV MYPATH /home
WORKDIR $MYPATH

dockerfile测试

  • docker image build -f Dockerfile1 -t alpine0304:v1 . #运行

  • docker image ls #查看

dockerfile构建示例2

vim Dockerfile2

FROM alpine:latest
ENV MYPATH /home
RUN echo -e 'https://mirrors.aliyun.com/alpine/v3.6/main/\nhttps://mirrors.aliyun.com/alpine/v3.6/community/' > /etc/apk/repositories
RUN apk update
WORKDIR $MYPATH
USER root
RUN apk add curl

dockerfile测试

  • docker image build -f Dockerfile2 -t alpine0304:v2 . #运行dockerfile

  • curl www.baidu.com #直接运行curl进行测试

  • docker container run -it alpine0304:v2 curl www.baidu.com #利用容器运行curl

dockerfile构建示例3

vim Dockerfile3

FROM alpine:latest
MAINTAINER inspur
LABEL description="desc image"
COPY mysqlpwd /home
ONBUILD RUN echo "copy success"
ARG VERSION
LABEL version=$VERSION

dockerfile测试

  • docker image build -f Dockerfile3 --build-arg VERSION=2.0 -t alpine0304:v3 . #--build-arg=[] 设置镜像创建时的变量

  • docker image inspect alpine0304:v3 #查看详细信息

  • vim Dockerfile31

  • FROM alpine0304:v3
    ENV MYPATH /home
  • docker image build -f Dockerfile31 -t alpine0304:v31 .

  • Dockerfile31 继承 Dockerfile3 镜像,会执行ONBUILD里的命令

dockerdfile构建示例4

vim DockerfileNginx

#基于alpine镜像,安装nginx web服务器,发布web程序
FROM alpine:latest
#设置apk工具的国内repositories地址
RUN echo -e 'https://mirrors.aliyun.com/alpine/v3.6/main/\nhttps://mirrors.aliyun.com/alpine/v3.6/community/' > /etc/apk/repositories
#安装nginx
RUN apk update
RUN apk add nginx
#配置nginx,修改配置文件
COPY nginx.conf /etc/nginx/nginx.conf
#创建运行时需要的目录
RUN mkdir /home/www
RUN mkdir /run/nginx
#复制web程序
COPY index.html /home/www
#启动WEB服务
CMD ["nginx","-g","daemon off;"]
#开放80端口
EXPOSE 80

dockerfile测试

  • docker image build -f DockerfileNginx -t alpine-nginx:1.0 . #创建

  • docker container run -idt --name nginx -p 80:80 alpine-nginx:1.0 #容器运行 -p 端口映射

  • docker container ls #查看

  • curl localhost:80 #通过curl访问本机80端口验证

  • sudo firewall-cmd --add-port=80/tcp #再开一个80端口,使得window可以访问nginx

  • 浏览器输入虚拟机IP地址可进行访问

dockerdfile构建示例5

vim Dockerfilejava

FROM docker.io/jeanblanchard/alpine-glibc
#安装JDK
COPY jdk-8u121-linux-x64.tar.gz /opt
#解压
RUN tar -zxvf /opt/jdk-8u121-linux-x64.tar.gz -C /opt
RUN rm /opt/jdk-8u121-linux-x64.tar.gz
#环境变量
ENV JAVA_HOME=/opt/jdk1.8.0_121
ENV PATH=$PATH:$JAVA_HOME/bin
ENV CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
COPY test.jar /home
WORKDIR /home
CMD ["java","-cp","test.jar","org.zyd.HelloDocker"]
  • docker image build -f Dockerfilejava -t myjava:v1 . #下载镜像

  • docker container run myjava:v1 #运行镜像

docker网络管理

docker有四种网络网络模式

docker网络配置配置说明
host模式-net=host容器和宿主机共享Network namespace。
container模式-net=container:NAME_or_ID容器和另外一个容器共享Network namespace。kubernetes中的pod就是多个容器共享一个Network namespace。
none模式-net=none容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair 和网桥连接,配置IP等。
bridge模式-net=bridge(默认为该模式)
  1. 列出主机的网络

    docker network ls

  2. 查看网络信息

    docker network inspect demo-network

  3. 创建网络

    docker network create --driver bridge demo-network

  4. 连接网络

    docker network connect demo-network 1898ba918696

  5. 断开连接

    docker network disconnect demo-network 1898ba918696

  6. 删除网络

    docker network rm demo-network

docker compose

Docker Compose是一个工具,它使用YAML文件来定义Docker容器的配置。这个工具可以用来启动、停止和重启一组Docker容器。它使得在Docker环境中管理和编排容器变得简单。

示例

vim compose.yaml

services:
  db:
    image: mariadb:10.6.4-focal
    command: '--default-authentication-plugin=mysql_native_password'
    volumes:
       - db_data:/var/lib/mysql
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=somewordpress
      - MYSQL_DATABASE=wordpress
      - MYSQL_USER=wordpress
      - MYSQL_PASSWORD=wordpress
    expose:
      - 3306
      - 33060
  wordpress:
    image: wordpress:latest
    ports:
      - 80:80
    restart: always
    environment:
      - WORDPRESS_DB_HOST=db
      - WORDPRESS_DB_USER=wordpress
      - WORDPRESS_DB_PASSWORD=wordpress
      - WORDPRESS_DB_NAME=wordpress
volumes:
  db_data:
  1. 运行

    docker compose up -d

  2. 查看日志 docker compose logs

  3. 查看运行的服务 docker compose ps

  4. 关闭服务 docker compose down

  • 22
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值