这是一篇记录 Docker 容器常用命令的文章,在此记录了我需要的 Docker 命令,我也会随着学习增加相关命令到这篇文章。

镜像管理命令

# 查看本地镜像
docker images

# 搜索镜像
docker search nginx

# 拉取镜像(下载)
docker pull nginx:latest
docker pull ubuntu:20.04

# 删除镜像
docker rmi nginx:latest

# 强制删除镜像
docker rmi -f nginx:latest

容器生命周期管理

# 创建并启动容器
docker run nginx
docker run -d nginx  # 后台运行
docker run -it ubuntu bash  # 交互式运行

# 常用参数:
# -d:后台运行
# -it:交互模式
# --name:指定容器名
# -p:端口映射
# -v:挂载卷

# 示例:运行Nginx并映射端口
docker run -d --name my-nginx -p 8080:80 nginx

# 查看运行中的容器
docker ps

# 查看所有容器(包括停止的)
docker ps -a

# 停止容器
docker stop 容器ID/容器名

# 启动已停止的容器
docker start 容器ID/容器名

# 重启容器
docker restart 容器ID/容器名

# 进入容器内部
docker exec -it 容器ID/容器名 bash

# 删除容器
docker rm 容器ID/容器名

# 强制删除运行中的容器
docker rm -f 容器ID/容器名

容器操作命令

# 查看容器日志
docker logs 容器ID/容器名
docker logs -f 容器ID/容器名  # 实时查看

# 查看容器资源使用情况
docker stats

# 查看容器内部进程
docker top 容器ID/容器名

# 复制文件到容器
docker cp 本地文件路径 容器ID:容器内路径

# 从容器复制文件到本地
docker cp 容器ID:容器内路径 本地文件路径

实战演练

示例1:运行一个 Nginx 服务器

# 1. 拉取Nginx镜像
docker pull nginx

# 2. 运行Nginx容器
docker run -d --name my-site -p 8080:80 nginx

# 3. 访问网站
# 打开浏览器访问:http://localhost:8080

# 4. 修改默认页面
docker exec -it my-site bash
# 进入容器后执行:
echo "<h1>Hello Docker!</h1>" > /usr/share/nginx/html/index.html
exit

# 5. 查看日志
docker logs my-site

# 6. 停止容器
docker stop my-site

示例2:运行一个 Python 应用

创建一个简单的 Python Flask 应用:

# 1. 创建一个项目目录
mkdir my-flask-app
cd my-flask-app

# 2. 创建app.py
cat > app.py << 'EOF'
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)
EOF

# 3. 创建Dockerfile
cat > Dockerfile << 'EOF'
FROM python:3.9-slim
WORKDIR /app
COPY app.py .
RUN pip install flask
EXPOSE 5000
CMD ["python", "app.py"]
EOF

# 4. 构建镜像
docker build -t my-flask-app .

# 5. 运行容器
docker run -d --name flask-app -p 5000:5000 my-flask-app

# 6. 访问应用
# 打开浏览器访问:http://localhost:5000

数据持久化(Volume)

# 创建数据卷
docker volume create my-data

# 查看数据卷
docker volume ls

# 使用数据卷运行容器
docker run -d --name mysql-db \
  -v my-data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -p 3306:3306 \
  mysql:5.7

# 绑定挂载(使用本地目录)
docker run -d --name my-site \
  -v /本地/网站/目录:/usr/share/nginx/html \
  -p 8080:80 \
  nginx

-v 后面的本地路径可以用 ${PWD} 获取当前路径,${PWD}/config 就是获取当前路径作为前缀组成完整的绝对路径。

清理命令

# 清理未使用的容器
docker container prune

# 清理未使用的镜像
docker image prune

# 清理所有未使用的资源
docker system prune -a

查看详细信息

# 查看容器详细信息
docker inspect 容器ID/容器名

# 查看镜像详细信息
docker inspect 镜像名:标签

注意事项

  • 容器命名:总是用 –name 给容器命名,方便管理
  • 端口冲突:确保宿主机端口没有被占用
  • 资源限制:可以用 -m 限制内存,–cpus 限制CPU
  • 日志管理:定期清理日志,避免占用太多磁盘空间
  • 安全考虑:不要以root用户运行容器中的应用