Docker 容器使用

Docker 容器是一个轻量级、可移植、自给自足的软件环境,用于运行应用程序。容器将应用程序及其所有依赖项 (包括库、配置文件、系统工具等)封装在一个标准化的包中,使得应用能够在任何地方一致地运行。

基本概念

镜像(Image)

容器的静态模板,包含了应用程序运行所需的所有依赖和文件。镜像是不可变的。

容器(Container)

镜像的一个运行实例,具有自己的文件系统、进程、网络等,且是动态的。容器从镜像启动,并在运行时保持可变。

常用命令

命令功能示例
docker run启动一个新的容器并运行命令docker run -d ubuntu
docker ps列出当前正在运行的容器docker ps
docker ps -a列出所有容器(包括已停止的)docker ps -a

容器操作

获取镜像

如果本地没有所需的镜像,可以使用 docker pull 命令从 Docker Hub 下载:

docker pull ubuntu

启动容器

使用 ubuntu 镜像启动一个交互式容器:

docker run -it ubuntu /bin/bash

参数说明

  • -i:交互式操作
  • -t:终端
  • /bin/bash:容器启动后执行的命令

后台运行

使用 -d 参数让容器在后台运行:

docker run -itd --name ubuntu-test ubuntu /bin/bash

进入容器

有两种方式可以进入运行中的容器:

使用 docker attach

docker attach container_id

注意:使用 attach 命令退出容器时,容器会停止运行。

使用 docker exec(推荐)

docker exec -it container_id /bin/bash

推荐使用此方法,因为退出容器时不会导致容器停止。

导出和导入容器

# 导出容器
docker export container_id > ubuntu.tar

# 导入容器快照
cat docker/ubuntu.tar | docker import - test/ubuntu:v1

运行 Web 应用

以下示例展示如何运行一个 Python Flask Web 应用:

# 拉取镜像
docker pull training/webapp

# 运行容器
docker run -d -P training/webapp python app.py

# 指定端口映射
docker run -d -p 5000:5000 training/webapp python app.py

常见问题

权限不足问题

执行 docker 命令时出现权限不足错误:

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

解决方法 1:使用 sudo

在 docker 命令前加上 sudo

解决方法 2:将用户添加到 docker 用户组

sudo groupadd docker     # 添加 docker 用户组
sudo gpasswd -a $USER docker     # 将当前用户加入到 docker 用户组
newgrp docker     # 更新用户组
docker ps    # 测试 docker 命令