本文提供了全面的Docker教程,涵盖Docker的基本概念、主要特点和应用场景。文章详细介绍了Docker的安装方法、环境配置以及基础命令,并深入讲解了如何使用Dockerfile创建自定义镜像。
Docker简介Docker是一个开源的应用容器引擎,可以让开发者将应用及其依赖包打包到一个可移植的容器中,然后发布到任何安装了Docker的Linux或Windows机器上,实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker的主要特点包括:
Docker的应用场景非常广泛,具体包括:
docker --version
,检查Docker版本。
docker --version
docker --version
,检查Docker版本。
docker --version
对于Linux系统,这里以Ubuntu为例进行说明。
sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update sudo apt-get install docker-ce
docker --version
systemctl status docker
命令来查看服务状态。
systemctl status docker
Docker镜像是一个只读模板,包含了运行Docker容器所需的文件系统。可以通过以下命令来管理Docker镜像:
拉取镜像:
docker pull <image-name>
例如,拉取一个Nginx镜像:
docker pull nginx
列表查看镜像:
docker images
删除镜像:
docker rmi <image-id>
Docker容器是镜像运行实例,可以通过以下命令来管理容器:
运行容器:
docker run -d -p 80:80 nginx
这个命令会启动一个Nginx容器,并将容器的80端口映射到主机的80端口。
查看容器:
docker ps
停止容器:
docker stop <container-id>
docker rm <container-id>
Docker提供了丰富的网络和存储管理功能:
创建网络:
docker network create my-net
连接容器到网络:
docker run -d --name webserver --network my-net nginx
查看网络:
docker network ls
删除网络:
docker network rm my-net
docker run -it --name test-container -v /host/path:/container/path ubuntu:latest
这个命令会在主机的/host/path
和容器的/container/path
之间创建一个挂载点。
Dockerfile是一个文本文件,包含了构建Docker镜像所需的全部命令。Dockerfile的基本语法包括以下几个命令:
FROM ubuntu:latest
RUN apt-get update && apt-get install -y python3
CMD ["python", "app.py"]
EXPOSE 80
ENTRYPOINT ["python", "app.py"]
ENV MY_VAR="value"
编写Dockerfile的基本步骤如下:
FROM
命令指定基础镜像。RUN
命令安装必要的依赖。WORKDIR
命令设置工作目录。COPY
或ADD
命令复制文件到镜像中。ENV
命令设置环境变量。CMD
或ENTRYPOINT
命令设置容器启动时要执行的命令。假设我们需要创建一个简单的Python应用镜像。
创建一个Dockerfile:
FROM python:3.7-slim WORKDIR /app COPY . /app RUN pip install -r requirements.txt CMD ["python", "app.py"]
docker build -t my-python-app .
使用docker build
命令可以构建镜像。命令格式如下:
docker build -t <image-name> .
例如,构建名为my-python-app
的镜像:
docker build -t my-python-app .Docker容器的常见操作
docker run -d --name my-container nginx
docker stop my-container
docker rm my-container
docker ps -a
docker ps
docker run
命令指定挂载点,例如:
docker run -v /host/path:/container/path my-container
docker network create my-net docker run -d --name webserver --network my-net nginx docker run -d --name app --network my-net my-app
假设我们有一个简单的Python Flask应用,其目录结构如下:
./ └── app.py
其中,app.py
的内容如下:
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!' if __name__ == '__main__': app.run(host='0.0.0.0', port=80)
在应用的根目录创建一个Dockerfile
文件,内容如下:
FROM python:3.7-slim WORKDIR /app COPY . /app RUN pip install -r requirements.txt CMD ["python", "app.py"]
构建镜像:
docker build -t my-web-app .
启动容器:
docker run -d -p 80:80 --name my-web-container my-web-app
http://<服务器IP>
,如果看到"Hello, World!",说明部署成功。以上是使用Docker部署一个简单的Web应用的完整流程,通过这个流程,你可以了解如何使用Docker来方便地管理和部署应用程序。