DOCKER 学习笔记2 认识dockerfile自定义镜像
Dockerfile 概念
Dockerfile 是一个文本文件,但包含所构建容器在运行时候的参数、库、资源配置。可以简单理解为我们现有的镜像,比如Centos/Nginx 但我们需要构建一个容器的时候,却需要用一些操作将这两个镜像组合在一起,比如要构建一个Nginx容器。
- 那首先需要一个操作系统、比如Centos
- 然后在这个操作系统里面下载NGINX
- 配置Nginx 监听端口等等。
这样是不是一个容器就构建出来了。这个容器是独立运行的一个操作系统。
镜像和容器的关系
镜像运行起来就成为了容器。一个镜像可以生成多个容器。这就好比是两种状态。
Dockerfile 格式
# 指定基础镜像信息
FROM centos:centos7
# 维护者信息
MAINTAINER mrc xxx@qq.com
# 镜像操作命令 RUN 用来操作
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
RUN yum -y update
RUN yum install -y epel-release
RUN yum install -y nginx
#RUN echo '<h1>hello world docker</h1>' >> /usr/share/nginx/html/index.html
# 容器启动执行命令
CMD /usr/sbin/nginx
一个Dockerfile 文件包含的内容有这四部分。开始就要指定基础镜像信息。以及维护者信息。而后通过RUN 命令执行镜像操作命令,用来操作基础镜像。
CMD 指令允许用户指定容器的默认执行的命令。此命令会在容器启动且 docker run 没有指定其他命令时运行。
构建镜像
通过刚才的Dockerfile 文件,我们已经自定义了一个指定的镜像文件。现在用这个镜像构建文件来生成一个我们自定义的镜像。
docker build
命令会根据当前目录Dockerfile 文件以及上下文构建新的镜像。
上下文所指的是当前目录或者一个git 仓库地址。构建上下文会遍历子目录递归进行处理。可以通过
.dockerignore
文件忽略上下文目录当中的不需要要的子目录
通常在一个新的文件夹下放置Dockerfile 文件进行构建。
mkdir -p docker
cd docker
vi Dockerfile
## 加入以下内容
FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
# 开始构建 注意有一个点 -t 代表加入标签
docker build -t test:v1 .
运行镜像
docker run --name docker_test -d -p 8080:80 test:v1
- test表示名称 v1表示标签或者也叫版本
--name
表示运行时候的名称-d
后台运行-p
端口映射 将本机8080端口映射到nginx 80端口
访问本机IP+8080端口
动态修改
要是我想要修改这个容器内的内容呢?当然也有可以交互的命令行
docker exec -it docker_test bash
-i
即使没有连接,也保持STDIN打开-t
分配给伪TTYbash
即命令处理器
刷新查看内容的改变
查看容器内容的改变
docker diff xxx
容器的操作
### 容器停止
docker container stop name
### 启动已经停止掉的容器
docker container start xxx
### 重启容器
docker container restart xxx
参考
但行好事,相信技术,转载请注明出处