Docker使用教程

# Docker使用教程

Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似iPhone的app),更重要的是容器性能开销极低。

## 安装Docker

Docker支持多种操作系统,如Ubuntu、CentOS、Windows等。在本教程中,我们以Ubuntu为例,介绍如何安装Docker。

### 前提条件

- 一个运行Ubuntu 16.04或更高版本的64位系统
- 一个具有sudo权限的用户账号
- 一个稳定的网络连接

### 步骤

1. 更新系统软件包并安装一些必要的依赖

```bash
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
  1. 添加Docker的官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  1. 添加Docker的稳定版仓库
echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. 安装Docker引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
  1. 验证Docker是否安装成功
sudo docker run hello-world

如果看到以下输出,说明Docker已经成功安装并运行:

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

使用Docker

安装好Docker后,我们就可以开始使用Docker来创建和运行容器了。在本教程中,我们将介绍一些基本的Docker命令和操作。

获取镜像

Docker镜像是一个包含了应用程序和所有依赖的只读模板,用于创建容器。我们可以从Docker Hub或其他仓库中获取镜像,也可以自己创建镜像。

要从Docker Hub获取一个镜像,可以使用docker pull命令,例如:

docker pull ubuntu

这个命令会从Docker Hub下载最新的ubuntu镜像到本地。我们也可以指定镜像的版本,例如:

docker pull ubuntu:18.04

这个命令会下载ubuntu 18.04的镜像。

要查看本地已经下载的镜像,可以使用docker images命令,例如:

docker images

这个命令会列出本地所有的镜像,包括镜像的名字、标签、ID、大小等信息。

启动容器

Docker容器是一个运行着一个或多个应用程序的独立的环境。我们可以使用docker run命令来从一个镜像创建并启动一个容器,例如:

docker run -it ubuntu /bin/bash

这个命令会从ubuntu镜像创建并启动一个容器,并在容器中执行/bin/bash命令,进入一个交互式的shell。参数说明如下:

  • -i:交互式操作
  • -t:终端
  • ubuntu:ubuntu镜像
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式shell,因此用的是/bin/bash

要退出容器,直接输入exit即可。

我们也可以使用-d参数来让容器在后台运行,例如:

docker run -d ubuntu /bin/bash -c "while true; do echo hello; sleep 1; done"

这个命令会从ubuntu镜像创建并启动一个容器,并在容器中执行一个无限循环,每隔一秒打印一次hello。参数说明如下:

  • -d:后台运行
  • /bin/bash -c "...":执行一个shell脚本

要查看正在运行的容器,可以使用docker ps命令,例如:

docker ps

这个命令会列出所有正在运行的容器,包括容器的ID、名字、状态、端口映射等信息。

停止容器

要停止一个正在运行的容器,可以使用docker stop命令,例如:

docker stop <容器ID或名字>

要停止所有正在运行的容器,可以使用以下命令:

docker stop $(docker ps -q)

要删除一个已经停止的容器,可以使用docker rm命令,例如:

docker rm <容器ID或名字>

要删除所有已经停止的容器,可以使用以下命令:

docker container prune

进入容器

在使用-d参数时,容器启动后会进入后台。如果想要进入容器,可以使用以下指令:

  • docker attach
  • docker exec

docker attach命令可以让我们重新连接到一个正在运行的容器的标准输入输出和错误流上,例如:

docker attach <容器ID或名字>

注意:如果从这个容器退出,会导致容器的停止。

docker exec命令可以让我们在一个正在运行的容器中执行一个新的命令,例如:

docker exec -it <容器ID或名字> /bin/bash

这个命令会在容器中启动一个新的shell,让我们可以交互地操作容器。注意:如果从这个容器退出,容器不会停止,这就是为什么推荐大家使用docker exec的原因。

导出和导入容器

如果要导出本地某个容器,可以使用docker export命令,例如:

docker export <容器ID或名字> > <文件名>.tar

这样将导出容器快照到本地文件。

如果要从容器快照文件中再导入为镜像,可以使用docker import命令,例如:

cat <文件名>.tar | docker import - <镜像名>:<标签>

此外,也可以通过指定URL或者某个目录来导入,例如:

docker import http://example.com/exampleimage.tgz example/imagerepo

运行一个web应用

前面我们运行的容器并没有什么特别的用处。接下来让我们尝试使用Docker来构建一个web应用程序。我们将在Docker容器中运行一个Python Flask应用来提供一个web服务。

首先,我们需要创建一个名为app.py的文件,内容如下:

PythonAI 生成的代码。仔细查看和使用。 有关常见问题解答的详细信息.

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello from Docker!"

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

这个文件定义了一个简单的Flask应用,监听5000端口,并返回一个欢迎信息。

然后,我们需要创建一个名为Dockerfile的文件,内容如下:

FROM python:3.8
WORKDIR /app
COPY . /app
RUN pip install flask
EXPOSE 5000
CMD ["python", "app.py"]

这个文件定义了一个用于构建镜像的指令,包括以下步骤:

  • 从 python:3.8 镜像为基础镜像
  • 将当前目录下的所有文件复制到容器的 /app 目录下
  • 安装 flask 模块
  • 暴露 5000 端口
  • 设置容器启动时执行的命令为 python app.py

接下来,我们需要在当前目录下执行以下命令来构建镜像:

docker build -t flask-app .

这个命令会根据 Dockerfile 的内容创建一个名为 flask-app 的镜像。参数说明如下:

-t: 指定镜像的名字和标签,格式为 name:tag
.: 指定 Dockerfile 的位置,这里是当前目录
构建完成后,我们可以使用 docker images 命令来查看我们的镜像:

docker images

这个命令会列出本地所有的镜像,我们可以看到 flask-app 镜像已经创建好了。

最后,我们可以使用 docker run 命令来运行我们的 web 应用:

docker run -d -p 5000:5000 flask-app

这个命令会从 flask-app 镜像创建并启动一个容器,并将容器的 5000 端口映射到主机的 5000 端口。参数说明如下:

-d: 后台运行
-p: 端口映射,格式为 host_port:container_port
flask-app: 镜像名
运行成功后,我们可以使用 docker ps 命令来查看我们的容器:
docker ps
这个命令会列出所有正在运行的容器,包括容器的 ID、名字、状态、端口映射等信息。
这时我们可以通过浏览器访问 http://localhost:5000 来看到我们的 web 应用:

恭喜你,你已经成功地使用 docker 来运行了一个 web 应用!