docker容器命令

 

docker命令大全

生命周期管理

run

创建并启动新容器, 可选择启动参数

docker run (启动参数) 镜像名

启动参数如下

-itd

参数 含义
-i 以交互模式运行容器
-t 为容器重新分配一个伪输入终端
-d 后台运行并返回容器ID
  • 示例, 交互模式启动容器, 分配终端后台运行
docker run -itd --rm alpine

–name

给容器命名

--name=容器名
  • 示例, 命名新建容器self_alpine
docker run -itd --rm --name=test alpine

-p/–publish

将容器内部端口映射到宿主机端口, 允许外部网络访问容器内部

-p 主机端口:容器端口
  • 示例, 将主机7890端口映射至容器80端口

外部可通过主机7890端口访问容器80端口

docker run -itd -p 7890:80 nginx

–net

指定容器网络连接类型

--net 网络类型

支持 bridge(默认), host, none, container四种类型

-e/–env

设置容器环境变量

-e 名称=
  • 示例, 设置mysql用户密码
docker run -it --rm -e MYSQL_ROOT_PASSWORD=123 mysql:5.6
  • 示例, 设置容器中环境变量TEST_VEN值abcdefg
docker run -it --rm -e TEST_VEN=abcdefg alpine

-v/–volume

挂载本地目录或卷到容器内

-v 宿主机目录路径:容器目录路径:(可选挂载选项, ro为只读, 默认rw读写权限)
  • 示例, 挂载本地self_test到容器中

–mount

挂载本地绝对路径目录到容器中

--mount type=挂载类型,source=挂载源,target=容器内挂载路径,(options)
graph LR;
    P(参数)
    P-->Type(type)
        Type-->Type1(bind 绑定挂载)
        Type-->Type2(volume Docker卷)
        Type--> Type3(tmpfs 临时文件系统)
    P-->Source(source)
        Source-->Source1(bind类型)-->Source11(宿主机目录路径)
        Source-->Source2(volume类型)-->Source21(Docker卷名)
    P-->Target(target)-->Target1(容器内挂载路径)
    P-->Options(options 挂载选项)
        Options-->Options1(readonly 只读)
        Options-->Options2(consistency 一致性)
  • 示例, 将本地${HOME}/Documents/code/挂载到容器/code, 权限为只读
docker run -it --rm --mount type=bind,source="${HOME}/Documents/code/",target="/code/",readonly busybox

–restart

设置容器重启策略

-restart=always 使得容器在退出时总是重启

–privileged

给予容器内进程几乎与宿主机root用户等同的权限

–rm

容器退出后自动删除容器和其中文件系统

  • 示例, 创建自动删除容器

start/stop/restart

启动、停止和重启容器

start

docker start 容器名/ID

stop

docker stop 容器名/ID

kill

立即终止一或多个正在运行容器

docker kill 容器名/ID

rm

删除一或多个已经停止容器

正常删除

docker rm 容器名/ID
强制删除
docker rm -f 容器名/ID

批量删除

删除所有容器
docker rm $(docker ps -aq)
先停用删除
docker stop $(docker ps -aq) && docker rm $(docker ps -aq)
删除异常容器
docker rm $(docker ps -a | grep Exited | awk '{print $1}')

pause/unpause

暂停和恢复容器中所有进程

exec

在运行中容器内执行命令

docker exec (参数) 镜名/ID 命令
graph LR;
    P(参数)
    P-->I("-i")-->I1(保持STDIN打开)
    P-->T("-t")-->T1(分配一个伪终端)
    P-->D("-d")-->D1(分离模式, 在后台运行)
  • 示例, busybox容器创建test/

进入容器

docker exec -it 容器名/ID shell解释器

多指令

docker exec (参数) 容器名/ID shell解释器 -c '命令1 && 命令2'
  • 示例, ubuntu安装mysql-clinet
docker run -itd --name=ubuntu_test ubuntu:18.04

docker exec -it ubuntu_test bash -c 'apt-get update && apt-get install -y mysql-client'

rename

重命名容器

操作

ps

列出容器

docker ps (-a, 所有容器)

第一列哈希值表示容器ID

inspect

获取docker对象(容器、镜像、卷、网络等)详细信息

IP地址

docker inspect 容器名/ID | grep IPAddress
  • 示例, 查看容器IP

获取容器ID

$(docker ps | grep "容器名" | awk '{print $1}')

# 或者
$(docker ps -aqf "name=容器名")
参数 说明
a 即使容器没运行也能获取
q 仅输出容器ID
f filter

export/import

打包容器

docker export 容器名/ID 压缩包.tar

加载容器

docker import 压缩包.tar 容器名/ID:tag

文件系统

cp

用于宿主机与容器之间文件拷贝

宿主机拷贝到容器

docker cp 宿主机路径 容器名/ID:容器内路径
  • 示例, 拷贝宿主机cmake_test到容器5d6..根目录下

容器拷贝到宿主机

docker cp 容器名/ID:容器内路径 宿主机路径
  • 示例, 拷贝容器5d6… /dev目录到宿主机当前路径

commit

将指定容器提交为镜像

docker commit -a (作者信息) -m (提交信息) 容器名/ID 目标镜像名:(tag)
  • 示例, 将容器bdfb176f914a提交为镜像self_image:v0.1

diff

显示docker容器文件系统变更

docker-compose

docker compose是一个工具, 用于定义和运行多容器docker应用程序

安装

下载对应docker-compose二进制文件, 移动到/usr/local/bin/下

创建

  • 示例, 创建docker-compose.yml
version: '3.8'
services:
    web:
        image: nginx:latest
        ports:
            - "80:80"
        volumes:
            - ./nginx.conf:/etc/nginx/nginx.conf
    app:
        image: node:12
        working_dir: /app
        volumes:
            - .:/app
        command: npm start
        depends_on:
            - web

web服务使用nginx镜像, 并映射主机80端口到容器80端口, 还挂载一个本地nginx.conf文件到容器中配置目录

app服务使用Node.js镜像, 设置工作目录, 挂载当前目录到容器中, 执行npm start命令

app服务依赖于web服务启动

命令

启动应用程序

在docker-compose.yml文件当前目录执行

docker-compose up -d

以后台模式启动所有服务

查看服务状态

docker-compose ps

停止服务

docker-compose stop

重启服务

docker-compose restart

构建

使用自定义Dockerfile构建镜像

docker-compose build

删除应用程序

docker-compose rm

查看日志

docker-compose logs

服务执行命令

docker-compose exec 服务名称 命令

删除

停止移除所有容器、网络和卷

docker-compose down