Docker极简教程 【进阶】

1. DockerFile创建镜像

创建文件Dockerfile文件,该文件名不可更改
vi Dockerfile
写入文本
FROM alpine:latest
MAINTAINER smilevt
CMD echo “Hello Docker!
保存退出
docker build命令用于使用 Dockerfile 创建镜像
docker build -t hello_docker .

  • -t : 镜像的名字及标签,通常 name:tag 或者 name
  • path : .点代表当前路径下的所有文件。
运行结果:
Docker极简教程 【进阶】
查看是否成功创建镜像并运行
Docker极简教程 【进阶】


2. Dockerfile安装Nginx

再次新建文件夹并新建Dockerfile文件,写入以下内容;
FROM ubuntu
MAINTAINER anthor
RUN sed -i ‘s/archive.ubuntu.com/mirrors.ustc.edu.cn/g’ /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y nginx
COPY index.html /var/www/html
ENTRYPOINT [“usr/sbin/nginx”“-g”“daemon off;”]
EXPOSE 80
简单说一下文本含义:从(FROM)ubuntu容器中运行(RUN)3条命令,第一条是修改archive.ubuntu.com为mirrors.ustc.edu.cn国内镜像,第二、三条是安装nginx,然后复制(COPY)index.html到容器内,提供容器进入点(ENTRYPOINT),使nginx在前台运行,之所以使用数组是为了隔开命令,最后暴露80端口。
接下来新建index.html文件,执行build命令创建镜像:
docker build -t hello-nginx:tag .

Docker极简教程 【进阶】
使用run命令启动该hello-nginx容器:
docker run -p 8080:80 -d hello-nginx:tag
测试访问host:8080端口如下:
Docker极简教程 【进阶】
可以看到,Nginx成功启动,并输出自定义的index.html。

3. Dockerfile命令小结

命令用途
FROMbase image
RUN执行命令
ADD添加文件
COPY拷贝文件
CMD执行文件
EXPOSE暴露端口
WORKDIR指定路径
MAINTAINER维护者
ENV设定环境
ENTRYPOINT容器入口
USER指定用户
VOLUMEmount point


4. 镜像分层

Dockerfile的每一行都会产生一个新层(新ID),比如:
Docker极简教程 【进阶】
已经存在image里面的层是只读的,一旦镜像运行为容器之后,就会产生一个新层(RW读写),分层的好处就是多个image可以共享相同的层,减少存储大小。

5. Volume


我们知道,Docker容器中的改动是不会被保存的,为了能够保存(持久化)数据以及共享容器间的数据,Docker提出了Volume的概念。简单来说,Volume就是目录或者文件,它可以绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上。 比如在使用数据库时就可以使用Volume。

6. Volume操作


说白了,Volume只是-v参数而已。容器和宿主机目录挂载的三种方式:

第一种方式

运行Nginx容器,-d:后台运行,–name:指定名称nginx,-v /usr/share/nginx/html:运行容器内部用来访问网页的地址,最后的nginx是镜像名。
docker run -d –name nginx -v /usr/share/nginx/html nginx
获取容器/镜像的元数据
docker inspect nginx
可以看到宿主机目录Source和容器内目录Destination:
Docker极简教程 【进阶】
继续查看宿本机目录:
Docker极简教程 【进阶】
注意:如果是mac,则该路径不是mac上的实际路径,因为mac上运行docker是还有一层虚拟层,这是docker虚拟层中的路径,可以在docker中访问到


第二种方式

在启动Nginx容器时使用-v参数挂载本地目录到容器目录
docker run -p 8080:80 –name mynginx -v $PWD:/usr/share/nginx/html -d nginx
这句命令使用PWD环境变量(该变量始终指向当前目录)将当前目录挂载到容器/usr/share/nginx/html目录。
我们访问主机8080端口
Docker极简教程 【进阶】
报错403,因为当前目录啥也没有,没有index.html文件。在当前目录新建该html文件,输入hello,访问网页
Docker极简教程 【进阶】


第三种方式

使用 docker create 创建一个新的容器但不启动它:
docker create -v $PWD/data:/var/mydata –name data_container ubuntu
  • 宿主机目录:$PWD/data
  • docker目录:/var/mydata
  • 容器名:data_container
  • 基础镜像:ubuntu
启动 ubuntu 容器镜像(默认ubuntu基础镜像没有服务):
docker run -it –volumes-from data_container ubuntu /bin/bash

  • -it: 以交互模式运行容器,并为容器重新分配一个伪输入终端
  • –volumes-from data_container:以另外一个容器挂载
  • 最后在容器内执行/bin/bash命令
进入到容器控制台后输入mount,查看挂载:
Docker极简教程 【进阶】
我们在/var/mydata目录下新建whatever.txt文件后退出,进入data目录查看,可以看到刚刚新建的txt文件。

本站所有文章均来自互联网,如有侵权,请联系站长删除。极客文库 » Docker极简教程 【进阶】
分享到:
赞(0)

评论抢沙发

评论前必须登录!