快速入门

🔗 官方文档 https://docs.docker.com/

img

Docker

docker类似于VMware是可以在linux上运行的“虚拟机”管理工具

Docker.png

基础命令

从仓库下载镜像:

从仓库下载最新的镜像

1
docker pull nginx

相当于

1
docker pull nginx:latest

查看本地有哪些镜像

1
docker images

运行容器

1
docker run nginx

这样只是简单的运行容器。可以添加参数

1
docker run -d -p 外部:80 nginx
  • d后台运行容器 p配置内外端口映射,-name指定容器运行的名字 v 映射文件,比如可以讲当前文件夹映射到/usr/share/nginx/html
选项 选项简写 说明
–detach -d 在后台运行容器,并且打印容器id。
–interactive -i 即使没有连接,也要保持标准输入保持打开状态,一般与 -t 连用。
–tty -t 分配一个伪tty,一般与 -i 连用。

https://blog.csdn.net/claram/article/details/104228727

查看正在运行的容器有哪些

1
docker ps

对容器进行修改

执行以下命令进入到容器当中,对容器进行修改

1
docker exec -it 容器id bash

退出容器

1
exit

强制删除容器

1
docker rm -f 容器id

生成一个新的镜像

1
docker commit 容器id 新镜像名字

注意:如果容器的数据通过 volume 挂载在宿主机时 commit 生成的镜像不会包含这部分的数据
我的 做法是通过 docker inspect 查看 挂载路径,然后备份该路径的文件,容器迁移时需要转移该备份到> 新的服务器上

通过Dockerfile构建镜像

1
2
FROM nginx
ADD ./ /usr/share/nginx/
1
docker build -t 镜像名 dockerfile路径

保存镜像为文件

1
docker 镜像id > 文件名

删除镜像

1
docker rmi 镜像id

导入镜像

1
docker load < 文件名

cp 命令

🔗 参考链接 https://www.runoob.com/docker/docker-cp-command.html

容器到宿主机

1
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-

宿主机到容器

1
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

OPTIONS说明:

  • **L :**保持源目标中的链接

镜像制作

容器转镜像

  • docker commit 容器id 镜像名称:b版本号
  • docker save -o 压缩文件名称 镜像名称:版本号
  • docker load -i 压缩文件名称

dockerfile

关键字 作用 备注
FROM 指定父镜像 指定dockerfile基于那个image构建
MAINTAINER 作者信息 用来标明这个dockerfile谁写的
LABEL 标签 用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看 key value
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 [“目录”] docker inspect xxx | grep Source 查看挂载地址
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 执行命令的时候 使用的shell

构建命令 不要漏掉最后一个 句号 “.”

1
docker build -f ./dockerfile -t app:1 .

-f 指定dockerfile文件路径

-t 指定镜像名称和路径

网络

🔗 原文链接:https://blog.51cto.com/u_12907475/5

前言

docker 的网络模式主要有三种,bridge、host、none;

  • bridge是docker安装后自动创建的虚拟网卡,创建容器时默认使用此模式。
  • host是指容器与宿主机共用宿主机的网络
  • none是指不创建网络
  • 查看docker的网络模式​​docker network ls​​​

docker 默认的网卡不支持固定ip,需自定义网络,使用自定义的网络来固定ip

  • 创建自定义网络​​docker network create ​​
  • 删除自定义网络​​docker network rm​​
  • 查看网卡信息​​docker network inspect ​​​

创建自定义网络

1
docker network create --subnet=172.127.0.0/24 --gateway=172.127.0.1 docker-br0
  • –subbet Ip地址
  • –gateway 网关
  • docker-br0 是自定义网络名称

创建容器

1
docker run -i -d -h oracledb --name oracle11g --network docker-br0 --ip 172.127.0.100 -p 1122:22 -p 1121:1521 --privileged=true centos:7 /usr/sbin/init
  • /usr/sbin/init 启动容器之后可以使用systemctl方法
  • privileged=true 获取宿主机root权限(特殊权限-)
    su命令和su -命令最大的本质区别就是:前者只是切换了root身份,但Shell环境仍然是普通用户的Shell;而后者连用户和Shell环境一起切换成root身份了。

创建虚拟网络

🔗 原文链接:https://docker.easydoc.net/doc/8117…

要想多容器之间互通,从 Web 容器访问 Redis 容器,我们只需要把他们放到同个网络中就可以了。

文档参考:https://docs.docker.com/engine/reference/commandline/network/

演示

创建一个名为test-net的网络:

1
docker network create test-net

运行 Redis 在 test-net 网络中,别名redis

1
docker run -d --name redis --network test-net --network-alias redis redis:latest

修改代码中访问redis的地址为网络别名

image-20221123213733553

运行 Web 项目,使用同个网络

1
docker run -p 8080:8080 --name test -v D:/test:/app --network test-net -d test:v1

查看数据

http://localhost:8080/redis

容器终端查看数据是否一致

相关其他命令

1
2
3
4
5
6
7
docker ps 查看当前运行中的容器
docker images 查看镜像列表
docker rm container-id 删除指定 id 的容器
docker stop/start container-id 停止/启动指定 id 的容器
docker rmi image-id 删除指定 id 的镜像
docker volume ls 查看 volume 列表
docker network ls 查看网络列表