Docker Tutorial for Beginer(day2)
一、Docker web 应用容器
## 创建了一个 python 应用的容器。
## 实现端口映射
docker run -d -P training/webapp python app.py
9e4d65abbfde training/webapp "python app.py" 7 seconds ago Up 6 seconds 0.0.0.0:49153->5000/tcp, :::49153->5000/tcp strange_bhabha
//容器5000端口被绑定到外部的49153端口
-P :是容器内部端口随机映射到主机的高端口。
-p : 是容器内部端口绑定到指定的主机端口。
docker run -d -p 5000:5000 training/webapp python app.py
ec2b83cfe780 training/webapp "python app.py" 4 seconds ago Up 3 seconds 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp upbeat_sanderson
- 我们可以指定容器绑定的网络地址,比如绑定 127.0.0.1。
docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py
- 修改绑定协议为UDP
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
二、Docker 容器互联
- 创建一个Docker 网络
## docker network create
docker network create -d bridge test-net
ps:可选项-d 指定创建网络的类型。
- 容器与Docker 网络进行连接
docker run -itd --name test1 --network test-net ubuntu /bin/bash
docker run -itd --name test2 --network test-net ubuntu /bin/bash
ps:使用ping测试test1 2之间的连接
三、Dockerfile
Dockerfile的编写
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
FROM nginx
RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html
FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。
RUN:用于执行后面跟着的命令行命令。有以下俩种格式:
shell 格式:
RUN <命令行命令>
# <命令行命令> 等同于,在终端操作的 shell 命令。
exec 格式:
RUN ["可执行文件", "参数1", "参数2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline
ps: Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大
FROM centos
RUN yum -y install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz
ps:三个run命令会生成三层镜像,造成体量增加
## 可以优化格式为
FROM centos
RUN yum -y install wget \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
&& tar -xvf redis.tar.gz
使用Dockerfile构建镜像
## 使用Docker build 通过Dockerfile 进行镜像构建
docker build -t centos:v3 .
##运行成功后用Docker images进行查看是否完成生成。
PS:由于此部分命令较多结构较为复杂,因此不根据菜鸟教程进行学习,会在深入学习中进行详细的学习。