Docker学习笔记
背景
最近有个项目客户要求用dockerfile部署,所以简单学了下docker,在此将一些比较实用的内容记录下来。
环境
系统 | Centos7(Docker要求版本在Centos内核3.1以上) |
---|
搭建
Docker常用命令整理
- 查看镜像
docker images- 删除镜像
docker rmi 镜像ID- 查看运行中容器
docker ps- 查看所有容器
docker ps -a- 运行容器
docker run -it 镜像名字- 运行容器plus(小括号表示没有可以不写)
docker run -it -d --name 容器名字 -p (外部地址:)外部端口:容器端口 镜像名字 镜像指令- docker run指令大全
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
–name=“nginx-lb”: 为容器指定一个名称;
–dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
–dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h “mars”: 指定容器的hostname;
-e username=“ritchie”: 设置环境变量;
–env-file=[]: 从指定文件读入环境变量;
–cpuset=“0-2” or --cpuset=“0,1,2”: 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
–net=“bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
–link=[]: 添加链接到另一个容器;
–expose=[]: 开放一个端口或一组端口;
–volume , -v: 绑定一个卷- 删除容器
docker rm 容器ID- 运行容器指令
docker exec -it 容器ID 指令(比如netstat -an | grep 8080等)- 进入容器
docker exec -it 容器ID /bin/bash- 查看容器网络桥接配置
docker network inspect bridge- 保存并创建新的容器(一般在更改容器内部文件后操作,因为docker容器重启会初始化容器)
docker commit 容器ID 新容器名称- 根据dockerfile创建docker镜像
docker build -t 镜像名称 dockerfile目录
Dockerfile常用命令整理
- 基础镜像,第一行必须是这个,注释除外
FROM scratch(不以任何为基础)
FROM <image>(:<tag/digest>)(小括号部分没有可以不填)- 维护者信息
MAINTAINER 维护者名字- 创建环境安装目录
WORKDIR 目录- 添加文件,如果是压缩包会自动解压
ADD 需要添加的文件 安装目录- 设置环境变量
ENV 变动名 变量内容- 构建时运行,多个时不要写多行,后两种一般是可执行文件加上参数的格式
RUN 指令 参数1 参数2
RUN [“指令”, “参数1”, “参数2”]
RUN [“参数1”, “参数2”]- 启动时运行,多个时不要写多行
CMD [“指令”, “参数1”, “参数2”]- 复制文件
COPY 本地文件路径 目标文件路径- 开放端口
EXPOSE 端口1 端口2 端口3
理解和感悟
其实玩过docker的人进入容器后的第一感觉——这不就是个虚拟机吗,纯净版的centos,进入了容器啥命令都不能用,真难受。不过后来发现可以用docker exec命令进行操作了,好像也没那么难受了。
后来我看了dockerfile的脚本文件,我就在想,这不都是最基础的命令吗,除了一些docker特有的命令,好像理解起来还是挺容易的。
有些技术并没有想象中那么复杂,只是我们被自己限制住了。