快速入门
🔗 官方文档 https://docs.docker.com/
Docker
docker类似于VMware是可以在linux上运行的“虚拟机”管理工具
基础命令
从仓库下载镜像:
从仓库下载最新的镜像
相当于
1
| docker pull nginx:latest
|
查看本地有哪些镜像
运行容器
这样只是简单的运行容器。可以添加参数
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 exec -it 容器id bash
|
退出容器
强制删除容器
生成一个新的镜像
1
| docker commit 容器id 新镜像名字
|
注意:如果容器的数据通过 volume 挂载在宿主机时 commit 生成的镜像不会包含这部分的数据
我的 做法是通过 docker inspect 查看 挂载路径,然后备份该路径的文件,容器迁移时需要转移该备份到> 新的服务器上
通过Dockerfile构建镜像
1 2
| FROM nginx ADD ./ /usr/share/nginx/
|
1
| docker build -t 镜像名 dockerfile路径
|
保存镜像为文件
删除镜像
导入镜像
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说明:
镜像制作
容器转镜像
- 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的地址为网络别名
运行 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 查看网络列表
|