常用地址 {#常用地址}
https://www.docker.com/products/docker-hub/
Docker常用命令 {#docker常用命令}
基本指令 {#基本指令}
|----------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 | shell # 查看版本信息 docker version # 显示统信息,包括镜像和容器数 docker info # 帮助命令 docker --help # 容器资源使用情况 docker stats docker stats <container_name_or_id>
|
镜像操作 {#镜像操作}
|----------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 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 | shell # 查看镜像 docker images # 查看镜像-包含中间镜像层 docker images -a # 删除单个镜像 docker rm 容器id # 拉取镜像 docker pull 镜像名称:版本号 # 启动镜像 docker run -it 远程镜像名称:版本号 /bin/bash \ # 为容器指定一个名称 --name="容器新名字" \ # 后台运行容器,并返回容器ID,也即启动守护式容器 -d \ # 以交互模式运行容器,通常与 -t 同时使用 -i \ # 为容器重新分配一个伪输入终端,通常与 -i 同时使用 -t \ # 随机端口映射 -P \ # 指定端口映射 -p 9200:9200 \ -d: 后台运行容器并返回容器 ID。 -it: 交互式运行容器,分配一个伪终端。 --name: 给容器指定一个名称。 -p: 端口映射,格式为 host_port:container_port。 -v: 挂载卷,格式为 host_dir:container_dir。 --rm: 容器停止后自动删除容器。 --env 或 -e: 设置环境变量。 --network: 指定容器的网络模式。 --restart: 容器的重启策略(如 no、on-failure、always、unless-stopped)。 -u: 指定用户。 # 删除所有镜像 docker rmi `docker images -q`
|
容器操作 {#容器操作}
|-------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 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 | shell # 查看正在运行容器 docker ps # 查看所有容器 docker ps -a # 启动容器 docker start 容器ID或者容器名 # 重启容器 docker restart 容器ID或者容器名 # 停止容器 docker stop 容器ID或者容器名 # 强制停止容器 docker kill 容器ID或者容器名 # 停用全部运行中的容器 docker kill $(docker ps -a -q) # 删除容器 docker rm -f 容器ID或者容器名 # 删除全部容器 docker rm -f $(docker ps -aq) # 进入容器内部 docker exec -it 容器ID或者容器名 /bin/bash # 推出容器 exit # 容器详细信息 docker inspect <container_name_or_id>
|
容器转为镜像流程 {#容器转为镜像流程}
|-------|----------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 | shell docker commit 容器id 镜像名称:版本号 docker save -o 压缩文件名称 镜像名称:版本号 docker load --i 压缩文件名称 例如:docker load -i envoy-1.26.1.tar.gz
|
数据卷容器 {#数据卷容器}
|----------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | shell # 数据卷未映射时,默认存储位置 cd /var/lib/docker/volumes # 创建启动c1数据卷容器,使用 --v 参数 设置数据卷 docker run --it --name c1 --v /volume centos:7 /bin/bash # 创建启动 c2 c3 容器,使用 ---volumes-from 参数 设置数据卷 docker run --it --name=c2 --volumes-from c1 centos:7 /bin/bash docker run --it --name=c3--volumes-from c1 centos:7 /bin/bash # 案例:执行完之后三个容器挂载在宿主机同一个数据卷下 # 比如:/06f881244d61ebd6e36992c8186fc944ba4f609d966b8668d7522710e6ed3c7e/_data docker run -it --name c3 -v /volume centos:7 docker run -it --name c1 --volumes-from c3 centos:7 docker run -it --name c2 --volumes-from c3 centos:7
|
文件操作 {#文件操作}
|-------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | shell # docker容器内文件复制 docker container cp nginx:/etc/nginx ~/nginx/ docker container cp nginx:/usr/share/nginx/html/cert ~/nginx/html/cert # 在宿主机上打包目录 tar -cvf halo.tar /root/halo # 将tar文件复制到容器内 docker cp halo.tar halo-blog:/tmp/ # 进入容器内并解压tar文件 docker exec -it halo-blog bash -c "mkdir -p /app/static/halo && tar -xvf /tmp/halo.tar -C /app/static/halo" # 删除容器内的tar文件 docker exec -it halo-blog rm /tmp/halo.tar
|
linux安装 Docker {#linux安装-docker}
安装 {#安装}
|----------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | shell # yum 包更新到最新 yum update # 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 yum install -y yum-utils device-mapper-persistent-data lvm2 # 设置yum源 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo yum makecache fast # 安装docker,出现输入的界面都按 y yum install -y docker-ce # 查看docker版本,验证是否验证成功 docker -v
|
卸载 {#卸载}
|---|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 | shell yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine docker-ce
|
启动 {#启动}
|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 | shell # docker用的端口较多,关闭防火墙,或者开启全部端口1/68783 # 关闭防火墙 systemctl stop firewalld # 禁止开机启动防火墙 systemctl disable firewalld # 启动docker systemctl start docker # 查看版本 docker -v
|
Macos安装 Docker 和 Docker Compose {#macos安装-docker-和-docker-compose}
|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 | java # 安装docker自带dockercompose sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bash_profile source ~/.bash_profile docker-compose -version docker compose -version
|
linux安装 Docker Compose {#linux安装-docker-compose}
安装 {#安装-1}
|-------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | shell sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 或者换源加速下载 sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose # 权限 chmod +x /usr/local/bin/docker-compose # 版本 docker-compose -version # 软链 ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose # Base自动补全命令 curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose # 如果这里出现错误,需要修改自己的hosts文件: echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts
|
卸载 {#卸载-1}
|-----|---------------------------------------------------------------------|
| 1 2 | shell # 二进制包方式安装的,删除二进制文件即可 rm /usr/local/bin/docker-compose
|
配置国内镜像源 {#配置国内镜像源}
|-------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 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 | shell sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://mirror.ccs.tencentyun.com", "https://docker.mirrors.ustc.edu.cn", "https://registry.docker-cn.com", "http://hub-mirror.c.163.com", "https://docker.m.daocloud.io", "https://dockerproxy.com", "https://cr.console.aliyun.com", "https://docker.nju.edu.cn", "https://ustc-edu-cn.mirror.aliyuncs.com/", "https://ccr.ccs.tencentyun.com/", "https://docker.registry.cyou", "https://docker-cf.registry.cyou", "https://docker.jsdelivr.fyi", "https://dockercf.jsdelivr.fyi", "https://dockertest.jsdelivr.fyi", "https://dockerpull.com", "https://dockerproxy.cn", "https://hub.uuuadc.top", "https://docker.1panel.live", "https://hub.rat.dev", "https://docker.anyhub.us.kg", "https://docker.chenby.cn", "https://dockerhub.jobcher.com", "https://dockerhub.icu", "https://docker.ckyl.me", "https://docker.awsl9527.cn", "https://docker.hpcloud.cloud", "https://atomhub.openatom.cn" ] } EOF
|
重启docker服务
|-----|-------------------------------------------------------------------------|
| 1 2 | shell sudo systemctl daemon-reload sudo systemctl restart docker
|
Docker创建自定义网络 {#docker创建自定义网络}
(用于容器之间的通信 common-network 是网络名称 可改)
docker network create common-network
创建自定义网络(用于容器之间的通信 common-network 是网络名称 可改)
docker network ls
查看网络
docker network rm
名称 删除自定义网络
Docker-Run命令部署容器 {#docker-run命令部署容器}
Docker-Compose部署容器 {#docker-compose部署容器}
Dockerfile {#dockerfile}
|----------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 | dockerfile # 该镜像需要依赖的基础镜像 FROM openwhisk/java8action:ff19223 # 将当前目录下的jar包复制到docker容器的/目录下 ADD sundear-admin.jar /sundear-admin.jar # 运行过程中创建一个mall-tiny-docker-file.jar文件 RUN bash -c 'touch /sundear-admin.jar' # 声明服务运行在8080端口 EXPOSE 8500 # 指定docker容器启动时运行jar包 ENTRYPOINT ["java", "-jar","/sundear-admin.jar"] # 指定维护者的名字 MAINTAINER zhangxin
|
执行
|-------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | shell # 通过dockerfile构建镜像:(注意后面的 空格+.) # docker bulid --f dockerfile文件路径 --t 镜像名称:版本 cd /app docker build -t garlic/sundear-admin:3.8.3 . # docker run 创建容器 docker rm -f sundear-admin docker run -p 8500:8500 --name sundear-admin \ -v /etc/localtime:/etc/localtime \ -v /mydata/app/sundear-admin/logs:/var/logs \ -v /mydata/app/sundear-admin/uploadPath:/home/ruoyi/uploadPath \ -d garlic/sundear-admin:3.8.3
|
其他dockerfile示例
|-------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | dockerfile # 需求:自定义centos7镜像。要求: 1. 默认登录路径为 /usr 2. 可以使用vim # 定义父镜像 FROM centos:7 # 定义作者信息: MAINTAINER itheima [itheima@itcast.cn](mailto:itheima@itcast.cn) # 执行安装vim命令: RUN yum install -y vim # 定义默认的工作目录: WORKDIR /usr # 定义容器启动执行的命令: CMD /bin/bash # 需求:定义dockerfile,发布springboot项目 FROM java:8 MAINTAINER itheima [itheima@itcast.cn](mailto:itheima@itcast.cn) ADD springboot.jar app.jar # 定义容器启动执行的命令: CMD java--jar app.jar
|
Dockerfile关键字 {#dockerfile关键字}
| 关键字 | 作用 | 备注 | |-------------|--------------|-----------------------------------------------------------------------------------------------------| | FROM | 指定父镜像 | 指定dockerfile基于那个image构建 | | MAINTAINER | 作者信息 | 用来标明这个dockerfile谁写的 | | LABEL | 标签 | 用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看 | | RUN | 执行命令 | 执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN ["command" , "param1","param2"] | | CMD | 容器启动命令 | 提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD ["command" , "param1","param2"] | | ENTRYPOINT | 入口 | 一般在制作一些执行就关闭的容器中会使用 | | COPY | 复制文件 | build的时候复制文件到image中 | | ADD | 添加文件 | build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务 | | ENV | 环境变量 | 指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name=value | | ARG | 构建参数 | 构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数 | | VOLUME | 定义外部可以挂载的数据卷 | 指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME ["目录"] | | EXPOSE | 暴露端口 | 定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp | | WORKDIR | 工作目录 | 指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径 | | USER | 指定执行用户 | 指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户 | | HEALTHCHECK | 健康检查 | 指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制 | | ONBUILD | 触发器 | 当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大 | | STOPSIGNAL | 发送信号量到宿主机 | 该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。 | | SHELL | 指定执行脚本的shell | 指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shellDocker 应用部署 |