暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【容器化技术专题】- Docker 常用命令

鲸鱼手记 2021-09-03
1085
  • 1、获取镜像

  • 2、运行镜像

  • 3、列出镜像

  • 4、删除本地镜像

  • 5、启动容器

    • 5.1 新建并启动

    • 5.2 启动已终止容器

  • 6、后台运行

  • 7、停止运行的容器

  • 8、进入容器

  • 9、导出和导入容器

    • 9.1 导出容器

    • 9.2 导入容器

  • 10、删除容器

    • 10.1 删除容器

    • 10.2 清理所有处于终止状态的容器

  • 11、其它删除


1、获取镜像

docker pull
:从Docker 镜像仓库拉取镜像。

docker pull [选项] [Docker Registry地址] <仓库名>:<标签>

具体的选项可以通过 docker pull --help 命令看到,这里我们说一下镜像名称的格式。

Docker 镜像仓库地址:地址的格式是<域名/IP>[:端口号]。

镜像仓库默认地址是 Docker Hub。

仓库名:仓库名称是两段式名称,<用户名>/<软件名>。对于Docker Hub,如果未登录docker login
,则默认为 libray,也就是官方镜像。

docker pull nginx:1.17.10

[root@localhost mycat]# docker pull nginx:1.17.10
1.17.10: Pulling from library/nginx
123275d6e508: Pull complete
6cd6a943ce27: Pull complete
a50b5ac4a7fb: Pull complete
Digest: sha256:2d780aabadacf8b15fe9ab46b79faa6a0e8dd3b91f3c3b492e0fb350dd859ece
Status: Downloaded newer image for nginx:1.17.10

上面的命令中没有给出 Docker 镜像仓库地址,因此将会从 Docker Hub 获取镜像。而镜像名称是ubuntu:16.04,因此将会获得官方镜像 library/ubuntu 仓库中标签为 16.04 的镜像。

2、运行镜像

有了镜像后,我们就能够以这个镜像为基础启动并运行一个容器。以上面 ubuntu:16.04 为例,如果我们打算启动里面的 bash 并且进行交互式操作的话,可以执行下面的命令。

# 执行docker run命令带--rm命令选项,等价于在容器退出后,执行docker rm -v。
docker run -it --rm nginx:1.17.10 bash

[root@localhost mycat]# docker run -it --rm nginx:1.17.10 bash
root@d2e3df7db0c9:/# echo 'Hello World'
Hello World

-it
-i
:交互式操作,-t
:终端。

—rm
:容器退出后将其删除,相当于执行 docker rm -v。

nginx:1.17.10
:以 nginx:1.17.10
镜像为基础镜像来启动容器。

bash
:放在镜像名后的是命令,这里我们希望有个交互式 shell
,因此用的是 bash

exit
:退出容器。

3、列出镜像

Docker 镜像列表,列表包含了仓库名称、标签tag、镜像 ID、创建时间以及所占用的空间。

docker image ls

[root@localhost mycat]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.17.10 e791337790a6 5 days ago 127MB
java 8-jre e44d62cf8862 3 years ago 311MB

查看镜像、容器、数据卷所占用的空间。

docker system df

[root@localhost mycat]# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 22 16 7.275GB 2.928GB (40%)
Containers 24 10 186.2MB 185.3MB (99%)
Local Volumes 119 3 6.951GB 6.939GB (99%)
Build Cache 0 0 0B 0B
[root@localhost mycat]#

仓库名、标签均为的镜像称为虚悬镜像 (dangling image),显示这类镜像:

docker image ls -f dangling=true

[root@localhost mycat]# docker image ls -f dangling=true
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> fc14b77f9097 6 weeks ago 465MB
<none> <none> c0ef65af5479 6 weeks ago 465MB

4、删除本地镜像

删除本地镜像

docker image rm [选项] <镜像1>[<镜像2>...]

批量删除镜像

docker image rm $(docker image ls -q redis)#删除所有仓库名为 redis 的镜像

删除所有在 ubuntu:16.04之前的镜像

docker image rm $(docker image ls -q before=ubuntu:16.04)

删除所有未被 tag 标记和未被容器使用的镜像:

docker image prune

[root@localhost mycat]# docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B

删除所有未被容器使用的镜像:

docker image prune -a

删除所有停止运行的容器:

docker container prune

5、启动容器

启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态 (stopped)的容器重新启动。

5.1 新建并启动

docker run

输出一个“Hello World”,之后终止容器。

docker run --name hello-world centos:7 bin/echo 'Hello World'

[root@localhost mycat]# docker run --name hello-world centos:7 bin/echo 'Hello World'
Hello World

5.2 启动已终止容器

docker container start 或者
docker start

[root@localhost mycat]# docker container start hello-world
hello-world
[root@localhost mycat]# docker start hello-world
hello-world

启动一个 bash 终端,允许用户进行交互。

docker run -t -i centos:7 bin/bash

-t
让 Docker 分配一个伪终端并绑定到容器的标准输入上, -i
则让容器的标准输入保持打开。

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  • 从宿主主机配置的网桥接囗中桥接一个虚拟接囗到容器中去
  • 从地址池配置一个 ip 地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止

6、后台运行

添加-d
参数来实现,Docker 后台运行容器。

如果不使用 -d 参数运行容器, 比如 docker run hello-world
会把日志打印在控制台;

如果使用了 -d 参数运行容器, 比如 docker run hello-world
不会输出日志,只会打印容器 ID(输出结果可以用 docker logs 容器名
查看)

[root@localhost mycat]# docker run -d --name hello-world centos:7 bin/echo 'Hello World'
057e9d165bfe1620bb1b3eb0167943ff6fbbef424cb25ab1b7d777598b2359ec
[root@localhost mycat]# docker logs hello-world
Hello World

7、停止运行的容器

# 终止一个运行中的容器
docker container stop

# 终止状态查看
docker containner ls -a

# 处于终止状态的容器可通过 start 启动
docker container start

# 重新启动容器
docker container restart

[root@localhost ~]# docker run -d --name nginx -p 8080:8090 nginx:1.17.10
e5b285d300810c8c52fe1c7ef13f6328021e01a34e4cc993bff7ea7c816f6331
[root@localhost ~]# docker stop nginx
nginx
[root@localhost ~]# docker start nginx
nginx
[root@localhost ~]# docker container stop nginx
nginx
[root@localhost ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e5b285d30081 nginx:1.17.10 "nginx -g 'daemon of…" About a minute ago Exited (0) 24 seconds ago nginx
[root@localhost ~]# docker restart nginx
nginx

8、进入容器

在使用-d
参数时,容器启动后会进入后台,某些时候需要对容器进行操作,使用 docker exec 命令可以进入到运行中。

exec
命令 -i -t
参数

docker exec
后面可以跟多个参数,这里使用-it
,就可以看到熟悉的 Linux 命令提示符。

docker exec -it 容器ID /bin/bash

[root@localhost ~]# docker exec -it nginx /bin/bash
root@e5b285d30081:/#

9、导出和导入容器

9.1 导出容器

导出某个容器,可以使用 docker export 命令。

docker export 容器ID > 导出文件名.tar

[root@localhost ~]# docker export nginx > nginx.tar
[root@localhost ~]# ls
nnginx.tar 公共 模板 视频 图片 文档 下载 音乐 桌面
[root@localhost ~]#

9.2 导入容器

导入容器,可以使用 docker import 从容器快照文件中再导入为镜像。

cat 导出文件名.tar | docker import - 镜像用户/镜像名:镜像版本

[root@localhost ~]# cat nginx.tar | docker import - jingyu/nginx:1.17.10
sha256:64e2c952b74e2d7970f95cfd4f913ec1a89273f9f101f798b2b20ee31337050e
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jingyu/nginx 1.17.10 64e2c952b74e 5 seconds ago 125MB

也可以通过指定URL 或者某个目录来导入。

docker import http://study.163.com/image.tgz example/imagerepo

10、删除容器

10.1 删除容器

删除一个处于终止状态的容器。

docker rm nginx

10.2 清理所有处于终止状态的容器

docker container ls -a
 命令可以查看所有已经创建的包括终止状态的容器,如果数量要一个个删除可能会很麻烦,用下面的命令可以清理掉所有终止状态的容器。

docker rm $(docker ps -a -q)

11、其它删除

删除所有未被挂载的卷:

docker volume prune

删除所有网络:

docker network prune

删除 docker 所有资源:

docker system prune


文章转载自鲸鱼手记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论