Docker快速入门

134 阅读6分钟

快速入门

🔗 官方文档 docs.docker.com/

img

Docker

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

Docker.png

基础命令

从仓库下载镜像:

从仓库下载最新的镜像

docker pull nginx

相当于

docker pull nginx:latest

查看本地有哪些镜像

docker images

运行容器

docker run nginx

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

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

blog.csdn.net/claram/arti…

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

docker ps

对容器进行修改

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

docker exec -it 容器id bash

退出容器

exit

强制删除容器

docker rm -f 容器id

生成一个新的镜像

docker commit 容器id 新镜像名字

通过Dockerfile构建镜像

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

保存镜像为文件

docker 镜像id > 文件名

删除镜像

docker rmi 镜像id

导入镜像

docker load < 文件名

cp 命令

🔗 参考链接 www.runoob.com/docker/dock…

容器到宿主机

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-

宿主机到容器

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

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

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

-f 指定dockerfile文件路径

-t 指定镜像名称和路径

网络

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

前言

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

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

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

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

创建自定义网络

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

创建容器

 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身份了。

创建虚拟网络

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

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

文档参考:docs.docker.com/engine/refe…

演示

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

docker network create test-net

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

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

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

image-20221123213733553

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

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

查看数据

http://localhost:8080/redis

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

相关其他命令

 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 查看网络列表