Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。
FROM centos
RUN yum 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
以上执行会创建 3 层镜像。可简化为以下格式:
FROM centos
RUN yum install wget \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
&& tar -xvf redis.tar.gz
Docker 容器网络连接
简单连接两个容器还可以使用 docker run --link
--link <name or id>:alias(其中,name和id是源容器的name和id,alias是源容器在link下的别名)
如:运行连接opentsdb的grafana容器,
不使用link直接创建的容器是互相隔离的,无法连接(或者使用下面的创建docker网络将其连接起来)
参照虚拟机,我们可以将好几台虚拟机的网络进行配置,从而是它们的网络连通。docker 同样有类似的东西,docker 连接会创建一个父子关系,其中父容器可以看到子容器的信息。
创建一个新的 Docker 网络
docker network create -d bridge test-net
查看网络
docker network ls
运行容器 test01、test02 连接到 test-net
docker run -itd --name test01 --network test-net ubuntu /bin/bash
docker run -itd --name test02 --network test-net ubuntu /bin/bash
在容器内部查看ip
ip addr
注意:
- 类似 ip 主机名这样的容器配置一般在启动容器时设置,并不提倡去容器内部更改,感觉也是这样好一点
- 一般启动集群的时候,用写好的 docker-compose.yml 去启动,或者将设置写成 start-container.sh 这样比较好
docker cp
将容器文件拷到主机
docker volume
docker数据卷 -v参数
把docker中运行的数据持久化,使得容器之间数据可以共享
使用 docker-compose
Compose 使用的三个步骤:
使用 Dockerfile 定义应用程序的环境。
使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
最后,执行 docker-compose up 命令来启动并运行整个应用程序。
安装docker-compose
python3 -m pip install docker-compose
验证 docker-compose -v
endpoint和cmd类似一个意思
alinode 官方镜像分析并提取 Dockerfile
https://www.52cik.com/2018/10/01/docker-alinode-dockerfile.html
从 Docker 镜像中提取 Dockerfile
https://www.52cik.com/2018/10/01/dockerfile-from-image.html
指定 ENTRYPOINT 指令为 shell 模式时,会完全忽略命令行参数
参考https://www.cnblogs.com/sparkdev/p/8461576.html
https://www.hi-linux.com/posts/25523.html
网友评论