Docker极简教程 【进阶】

简介: 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 : .点代表当前路径下的所有文件。


运行结果:


image.png


查看是否成功创建镜像并运行


image.png


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 .


image.png


3. Dockerfile命令小结


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

4. 镜像分层

Dockerfile的每一行都会产生一个新层(新ID),比如:


image.png


已经存在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:


image.png


注意:如果是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端口


image.png


第三种方式


使用 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,查看挂载:


image.png


我们在/var/mydata目录下新建whatever.txt文件后退出,进入data目录查看,可以看到刚刚新建的txt文件。






目录
相关文章
|
4月前
|
Oracle 关系型数据库 数据库
|
4月前
|
关系型数据库 MySQL Java
Docker Compose详细教程(从入门到放弃)
Docker Compose详细教程(从入门到放弃)
737 0
|
15天前
|
Cloud Native 持续交付 Docker
云原生技术实践:Docker容器化部署教程
【9月更文挑战第4天】本文将引导你了解如何利用Docker这一云原生技术的核心工具,实现应用的容器化部署。文章不仅提供了详细的步骤和代码示例,还深入探讨了云原生技术背后的哲学,帮助你理解为何容器化在现代软件开发中变得如此重要,并指导你如何在实际操作中运用这些知识。
|
1月前
|
网络协议 Unix Shell
Docker基本教程
这篇文章是关于Docker的入门教程,介绍了Docker的基本命令和操作,包括镜像搜索、拉取、列出、删除,容器的运行、进入、退出、查看状态、停止、重启和删除,以及权限问题的解决方法。
61 2
|
1月前
|
Linux 测试技术 Docker
Docker CE for CentOS 安装教程
Docker CE for CentOS 安装教程
81 1
|
22天前
|
Ubuntu Shell Linux
docker快速入门教程
docker快速入门教程
59 0
|
2月前
|
关系型数据库 MySQL Linux
Docker安装mysql详细教程, mysqld: Can‘t read dir of ‘/etc/mysql/conf.d/‘(报错已解决)
Docker安装mysql详细教程, mysqld: Can't read dir of '/etc/mysql/conf.d/' (Errcode: 2 - No such file or directory) 已解决
|
3月前
|
Docker 容器
尚硅谷2024新版3小时速通Docker教程
尚硅谷2024新版3小时速通Docker教程
46 1
尚硅谷2024新版3小时速通Docker教程
|
4月前
|
存储 JSON 安全
Docker 的 overlay2 扩容教程
Docker 的 overlay2 扩容教程
289 3