快速入门
🔗 官方文档 docs.docker.com/
Docker
docker类似于VMware是可以在linux上运行的“虚拟机”管理工具
基础命令
从仓库下载镜像:
从仓库下载最新的镜像
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 连用。 |
查看正在运行的容器有哪些
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身份了。
创建虚拟网络
要想多容器之间互通,从 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的地址为网络别名
运行 Web 项目,使用同个网络
docker run -p 8080:8080 --name test -v D:/test:/app --network test-net -d test:v1
查看数据
容器终端查看数据是否一致
相关其他命令
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 查看网络列表