Skip to main content

Docker命令

复制命令

从容器外复制到容器内

➜  web git:(main)docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e4edc18a2b87 node-client:latest "docker-entrypoint.s…" About a minute ago Up About a minute 3008/tcp competent_elion


docker cp ./package.json competent_elion:/usr/share

容器和宿主机文件拷贝

例子: 部署nextjs 网站

docker cp /Users/ruo/company-workspace/haixing-company/oss-next-i18next-ssg/out/. mynginx:/usr/share/nginx/html

rm *
# 删除子文件夹
rm -r *
docker cp /Users/ruo/company-workspace/haixing-company/weekly-star/out/. mynginx:/usr/share/nginx/html

容器内文件-->宿主机

docker cp 容器ID:容器内路径 目的主机路径

// 从容器拷贝到本地目录
docker cp nginx:/etc/nginx/nginx.conf /usr/nginx/nginx.conf

宿主机文件-->容器中

docker cp 主机路径 容器ID:容器内路径

// 从本地目录拷贝到容器
docker cp /usr/nginx/nginx.conf nginx:/etc/nginx/nginx.conf

docker cp /usr/nginx/html/main.html nginx:/usr/share/nginx/html

例子:

docker cp nextjs-test:/server.js /home/ruo/work-space/temp-space

docker cp jolly_visvesvaraya:/server.js /home/ruo/work-space/temp-space

docker cp 2916feb30290:/server.js /home/ruo/work-space/temp-space

docker cp jolly_visvesvaraya:/app /home/ruo/work-space/temp-space

docker cp 2916feb3029:/app /home/ruo/work-space/temp-space

镜像

查看镜像

docker images

docker image ls --all

-a:列出所有镜像(含历史镜像)
-q:只显示镜像ID
-f:过滤

创建新的镜像

docker image build -t code-platform .

删除镜像

docker rmi 镜像名称/ID
docker rmi -f 镜像名称/ID

容器

查看

docker ps [OPTIONS]

// 列出正在运行的容器信息
docker ps

// 会列出所有容器的信息,包括正在运行的和已经停止的容器。
// 除了基本信息外,还会显示容器的退出代码、命令、创建时间、端口映射等更详细的信息。
docker ps -a
  • -a:列出当前所有正在运行的容器+历史上运行过的
  • -l:显示最近创建的容器。-n:显示最近n个创建的容器。-q:静默模式,只显示容器编号。

启动容器

docker run[OPTIONS]IMAGE[COMMAND][ARG...]

docker run -p 3000:3000 code-platform

参数【OPTIONS】说明:

  • --name:为容器指定一个名称
  • -d:后台运行容器并返回容器ID,也即启动守护式容器
  • -i:以交互模式(interactive)运行容器,通常与-t同时使用
  • -t:为容器重新分配一个伪输入终端(tty),通常与-i同时使用。也即启动交互式容器(前台有伪终端,等待交互)
  • -e:为容器添加环境变量
  • -P:随机端口映射。将容器内暴露的所有端口映射到宿主机随机端口
  • -p:指定端口映射

-p指定端口映射的几种不同形式:

  • -p hostPort:containerPort:端口映射,例如-p 8080:80
  • -p ip:hostPort:containerPort:配置监听地址,例如 -p 10.0.0.1:8080:80
  • -p ip::containerPort:随机分配端口,例如 -p 10.0.0.1::80
  • -p hostPort1:containerPort1-p hostPort2:containerPort2:指定多个端口映射,例如-p 8080:80 -p 8888:3306

启动守护式容器

大部分情况下,我们系统docker容器服务是在后台运行的,可以通过-d指定容器的后台运行模式:

docker run -d 容器名
docker run -p 3600:3600 nextjs-test

或则快速运行:
docker start 1874f672f0a7

docker run --name nginx -p 8008:80 nginx

或则直接运行已有镜像:
docker start nginx

例子:启动nginx

docker run -d --name nginx -p 8008:80 nginx

-d 后台持续运行运行。
--name 自定义的容器名称。
-p 映射主机端口号到docker容器的端口号。

8008即为外部web访问的端口号,而80则为nginx容器对外暴露的端口号。

启动成功,就可以通过 ip:8008 访问站点

http://localhost:8008/

127.0.0.1:8008

启动交互式容器

以交互方式启动ubuntu镜像

docker run -it ubuntu /bin/bash

停止/重启容器

docker start 容器ID或者容器名
docker restart 容器ID或容器名

docker stop nginx
docker start nginx

强制停止容器:

docker kill 容器ID或容器名

查看容器内部细节

docker inspect容器ID或容器名

进入正在运行的容器

docker exec -it 容器名称/容器ID/容器ID简写 bashShell

例子:查看nginx容器的配置资源目录:

bash:
docker exec -it nginx bash

或则sh:
docker exec -it nginx sh

例子:进入容器后搜索看下nginx文件:

find -name nginx

cd /usr/share/nginx/

cat /usr/share/nginx/html/index.html

exit // 退出

docker exec 和 docker attach 区别:

  • attach直接进入容器启动命令的终端,不会启动新的进程,用exit退出会导致容器的停止
  • exec是在容器中打开新的终端,并且可以启动新的进程,用exit退出不会导致容器的停止

删除容器

提示: 这一步要确定删除容器没问题的情况下, 才可以做

docker container rm nginx

强制删除正在运行的容器

docker rm -f 容器ID或容器名

查看容器日志

docker logs 容器ID或容器名

其他命令

  • docker -v
  • 使用以下命令列出有关 Docker 安装的系统范围的信息,包括 WSL 2 上下文中你可使用的统计信息和资源(CPU & 内存):
docker info

docker pull hello-world

docker run hello-world

执行命令,默认去docker hub中搜索:

docker search 镜像名称

docker pull 镜像名称[:tag]

查看镜像/容器/数据卷所占的空间

docker system df