docker端口映射
-p80:81 #将宿主机80端口映射到容器81端口
docker run --name nginx01 -d -p80:81 morride/nginx:v1.18.0
docker挂载数据卷
-v宿主机目录:容器目录 #将宿主机目录挂载到容器目录
docker run --name nginx01 -d -p80:81 -v/root/test01:/root/test02 morride/nginx:v1.18.0
docker inspect xxxxxx| grep /root/test01 #查看容器挂载信息
docker传递环境变量
-e #传递环境变量
docker run --name nginx02 -d -e TEST=hello morride/nginx:v1.18.0 printenv
docker容器内安装软件
apt-get yum
首先需要下载apt-get源
tee /etc/apt/sources.list << EOF
deb http://mirrors.163.com/debian/ jessie main non-free contrib
deb http://mirrors.163.com/debian/ jessie-updates main non-free contrib
EOF
之后使用 apt-get update更新源
使用apt-get install -y 就能安装软件了
退出容器后将容器创建成一个新镜像
docker commit -p xxxxxxxxx morride/nginx:1.18.0-xxx
dockerfile应用
就是一个文本文件 文件名只能是dockerfile 里面其实就是一组组命令
docker build 进行构建镜像
- 格式
#注释
指令大写,内容小写,大小写是没有太多的强制要求,我们强烈要求使用指令大写,内容小写 - Dockerfile是按照顺序执行里面的指令的 从上到下依次执行
- 每一个dockerfile的第一个非注释指令,必须是“FROM” 用户为镜像文件创建的过程中,指定的基础镜像
- 在实践中,基础镜像可以是任何可用的镜像文件,默认情况下,docker build会在本地查找dockerfile上面指定的镜像,当本地不存在这个镜像时,则会从官方远程仓库拉取
Dockerfile核心指令
FROM #指定基础镜像
USER #指定运行的用户
WORKDIR #指定的工作目录
COPY #复制文件
ADD #高级复制,会自动解压文件
RUN #执行的命令
EXPOSE #指定对外的端口,用到的不多 -p -P
ENV #设置环境变量
CMD #容器启动后执行的命令
ENTRYPOINT #容器启动后执行的命令
RUN命令执行命令并创建新的镜像层,通常用于安装软件包
CMD命令设置容器启动后默认执行的命令及其参数,但CMD设置的命令能够被docker run命令后面的命令行参数替换
ENTRYPOINT配置容器启动时的执行命令(不会被忽略,一定会被执行,即使运行 docker run时指定了其他命令)
USER/WORKDIR指令 用户/工作目录
mkdir /opt/dockerfile
cd /opt/dockerfile
vim Dockerfile
FROM morride/nginx:v1.18.0
USER nginx
WORKDIR /usr/share/nginx/html
docker build . -t morride/nginx:v1.18.0_with_user_workdir
ADD/EXPOSE指令 高级复制带解压/指定端口
FROM morride/nginx:v1.18.0
ADD root/index.html /usr/share/nginx/html/index.html
EXPOSE 80
RUN/ENV指令 运行命令/指定环境变量
FROM centos:7.7.1908
ENV VER 4.9.2
RUN yum install -y tcpdump-$VER
CMD/ENTPYPOINT指令 容器启动后执行命名
FROM centos:7.7.1908
RUN yum install httpd -y
CMD [“httpd”,”-D”,”FOREGROUND”]
docker网络模型
1.NAT(默认)Bridge
docker exec -ti alpine /bin/sh
2.None 不配置任何网络
docker run -ti –rm –net=none alpine /bin/sh
3.Host 与主机共享网络 性价比最高
docker run -ti –rm –net=host alpine /bin/sh
4.联合网络 与另外一个运行中的容器共享网络
docker run -ti –rm –net=container:2b5c6a379cda alpine:test /bin/sh