Open wuyuedefeng opened 5 years ago
使用多FROM指令可以完成多阶段编译。每一条 FROM 指令都是一个构建阶段,多条 FROM 就是多阶段构建,虽然最后生成的镜像只能是最后一个阶段的结果,但是,能够将前置阶段中产生的文件拷贝到后边的阶段中,这就是多阶段构建的最大意义。
https://blog.csdn.net/weixin_44843859/article/details/111695012 https://mp.weixin.qq.com/s?__biz=MzIzMzgxOTQ5NA==&mid=2247553210&idx=3&sn=68f67ff55536424fc99a64fee7067fc5&chksm=e8fd8cb3df8a05a52d182deaebc4532547deabaca20a349454146a0efd07c33b1a32b5f817fa&scene=21#wechat_redirect
eg:
FROM node:10-alpine AS build
WORKDIR /app
COPY app /app
RUN npm install && npm run build
FROM nginx:stable-alpine
# 从From为build的构建中拷贝数据.
COPY --from=build /app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
本文档以
ubuntu 16.04
为例安装与启动
当要以非root用户可以直接运行docker时,需要执行
sudo usermod -aG docker username
命令,然后重新登陆基础知识
Docker 允许你在容器内运行应用程序, 使用
docker run
命令来在容器内运行一个应用程序。 eg:此时我们已进入一个 ubuntu15.10系统的容器, 我们尝试在容器中运行命令
cat /proc/version
和ls
分别查看当前系统的版本信息和当前目录下的文件列表, 我们可以通过运行exit命令或者使用CTRL+D来退出容器。使用以下命令创建一个以进程方式运行的容器
在输出中,我们没有看到期望的"hello world",而是一串长字符
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
这个长字符串叫做容器ID,对每个容器来说都是唯一的,我们可以通过容器ID来查看对应的容器发生了什么。首先,我们需要确认容器有在运行,可以通过
docker ps
来查看在容器内使用
docker logs
命令,查看容器内的标准输出我们使用
docker stop
命令来停止容器:可以通过命令
docker command --help
更深入的了解指定的 Docker 命令使用方法Docker 容器使用
Docker 镜像使用
当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载
使用
docker images
来列出本地主机上的镜像各个选项说明:
同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如ubuntu仓库源里,有15.10、14.04等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。
所以,我们如果要使用版本为
15.10
的ubuntu
系统镜像来运行容器时,命令如下:当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。
下载完成后,我们可以直接使用这个镜像来运行容器。
我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为:
https://hub.docker.com/
我们也可以使用docker search
命令来搜索镜像当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
更新镜像之前,我们需要使用镜像来创建一个容器。
在运行的容器内使用
apt-get update
命令进行更新。 在完成操作之后,输入 exit命令来退出这个容器。此时ID为
e218edb10161
的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit来提交容器副本。各个参数说明:
我们可以使用 docker images 命令来查看我们的新镜像 runoob/ubuntu:v2:
使用我们的新镜像 runoob/ubuntu 来启动一个容器
我们使用命令
docker build
, 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。 第一条FROM,指定使用哪个镜像源 RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。 然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。
使用
docker images
查看创建的镜像已经在列表中存在 我们可以使用新的镜像来创建容器我们可以使用
docker tag
命令,为镜像添加一个新的标签。docker tag 镜像ID,这里是 860c279d2fec ,用户名称、镜像源名(repository name)和新的标签名(tag)。 使用 docker images 命令可以看到,ID为860c279d2fec的镜像多一个标签。
容器连接
我们创建了一个 python 应用的容器。
们使用 -P 参数创建一个容器,使用 docker ps 可以看到容器端口 5000 绑定主机端口 32768。 我们也可以使用 -p 标识来指定容器端口绑定到主机端口。
另外,我们可以指定容器绑定的网络地址,比如绑定 127.0.0.1。
这样我们就可以通过访问 127.0.0.1:5001 来访问容器的 5000 端口。
上面的例子中,默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp。
docker port
命令可以让我们快捷地查看端口的绑定情况。当我们创建一个容器的时候,docker 会自动对它进行命名。另外,我们也可以使用 --name 标识来命名容器,例如:
我们可以使用
docker ps
命令来查看容器名称。