下面我就来详细讲解“Docker教程之使用dockerfile生成镜像”的完整攻略。
1. 准备工作
- 安装Docker
- 创建一个文件夹(例如my-docker-app)并进入该文件夹
- 在文件夹中创建一个Dockerfile文件(文件名必须大写)
2. 编写Dockerfile
在创建好Dockerfile文件后,我们需要按照以下步骤编写Dockerfile:
2.1 基础镜像
首先在Dockerfile中指定一个基础镜像。一般我们选择一个已有的Docker官方基础镜像,例如Ubuntu。编写代码如下:
FROM ubuntu:20.04
2.2 安装应用程序
在基础镜像的基础上,我们可以用RUN命令安装所需要的应用程序或库文件,如安装Python。编写代码如下:
RUN apt-get update && \
apt-get install -y python3-pip
2.3 复制应用程序
应用程序的代码需要复制到容器中。我们可以用COPY命令将本地文件复制到容器中。例如,我们想将当前文件夹下的myapp文件夹复制到容器中的/app目录下。编写代码如下:
COPY myapp /app
2.4 声明容器启动时监听的端口
使用EXPOSE命令声明容器将要监听的端口号。例如,我们想监听5000端口。编写代码如下:
EXPOSE 5000
2.5 定义启动容器时执行的命令
使用CMD命令定义容器启动时要执行的命令。例如,我们想执行Python程序app.py。编写代码如下:
CMD ["python3", "/app/app.py"]
Dockerfile编写完毕后,我们可以使用docker build命令将其打包成镜像,具体命令为:
docker build -t my-docker-app .
其中-t
表示给镜像命名,并在镜像名后加了.
来表示Dockerfile文件在当前目录下。
示例说明
接下来我会分别演示两个使用Dockerfile生成镜像的示例:
示例1:制作Python Flask Web应用的Docker镜像
1. 编写Dockerfile文件
在my-docker-app目录下创建名为Dockerfile的文件,并用编辑器打开,输入以下内容:
# 基础镜像选择 Python 镜像,标签为 3.6
# 更换镜像对应 python 版本的标签即可选择使用 python2 或 python3 作为基础镜像
FROM python:3.6
MAINTAINER Wangtao "tao_110@sina.com"
# 将工作目录设置为 /app
WORKDIR /app
# 将当前目录中的文件复制到容器 /app/ 中
ADD . /app/
# 设置环境变量
ENV NAME World
# 安装 requirements.txt 中指定的必要快
RUN ["pip", "install", "-r", "requirements.txt"]
EXPOSE 8000
# 容器启动时执行 python app.py
CMD ["python", "app.py"]
2. 编写app.py文件
在my-docker-app目录下创建Python文件名为app.py,输入以下代码:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=8000)
3. 编写requirements.txt文件
在my-docker-app目录下创建名为requirements.txt的文件,并输入以下内容,指定需要用到的Python库:
flask
4. 打包镜像
运行以下命令,制作mydockerapp:latest这个镜像:
$ docker build -t mydockerapp:latest .
5. 运行代码
使用刚刚打包完成的mydockerapp镜像运行容器。
$ docker run -it --rm -p 8000:8000 mydockerapp
然后访问 http://127.0.0.1:8000/api/hello ,将会看到"Hello World!"的输出。
示例2:使用Dockerfile建立Java应用程序的Docker镜像
1. 编写Dockerfile文件
在my-docker-app目录下创建名为Dockerfile的文件,并用编辑器打开,输入以下内容:
# set base image (host OS)
FROM openjdk:8-jdk-alpine
# set the working directory in the container
WORKDIR /code
# copy the dependencies file to the working directory
COPY dependencies.jar .
# command to run on container start
CMD [ "sh", "-c", "java -jar dependencies.jar" ]
2. 编写Java文件
在my-docker-app目录下创建Java文件名为App.java(文件名必须是首字母大写),输入以下代码:
public class App {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
3. 编译Java程序
在my-docker-app目录下运行以下命令来编译Java程序:
$ javac App.java
4. 打包jar文件
在my-docker-app目录下运行以下命令来打包jar文件:
$ jar cvf dependencies.jar App.class
5. 打包镜像
运行以下命令,制作mydockerapp:latest这个镜像:
$ docker build -t mydockerjava:latest .
6. 运行代码
使用刚刚打包完成的mydockerjava镜像运行容器。
$ docker run -it --rm mydockerjava
然后将会看到"Hello World!"的输出。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Docker教程之使用dockerfile生成镜像 - Python技术站