Docker 容器基本命令注意点

前言:

a. 本文主要为 Docker的视频教程 笔记。

b. 本机环境为 Windows 10 专业版,使用的命令行为 PowerShell。

1. docker run -d 表示在后台运行,不加 -d 表示依附于当前的命令行运行

例如:使用 Docker 运行一个 alpine 的镜像,并开启一个终端。如果不使用 “-d” 参数会直接在当前命令行响应

PS C:\Users\XXX> docker run -it alpine /bin/sh

/ #

注:直接使用 docker run + <容器> 而不使用 “-it” 参数会使容器执行完毕后很快退出。故如果要运行服务镜像,就应使用让容器阻塞的命令。

2. docker 命令有分组

使用 docker image 命令查看 docker 在 image 组中的命令, 使用 docker container 命令查看docker container组中的命令。

很多命令为简写:如 docker container ps -a 可简写为 docker ps -a。

3. 查看镜像的具体信息

使用 docker image inspect 命令。在 PowerShell 中配合使用 findstr /i version 可以查看某些镜像中软件的版本(在Linux下可以配合使用 grep -i version )

4. 镜像的导出和导入

原环境:

PS C:\Users\XXX> docker images | findstr busybox

busybox latest be5888e67be6 2 weeks ago 1.22MB

导出:

docker image save -o <OUT_FILE_NAME> <WHICH_IMAGE>

例如:docker image save -o docker_busybox.tar.gz busybox:latest

此时执行:docker image rm busybox 删除 busybox 镜像

PS C:\Users\XXX> docker images | findstr busybox

PS C:\Users\XXX>

导入:

docker image load -i <FILE_PATH>

例如: docker image load -i .\docker_busybox.tar.gz

5. 查看容器

docker container ls -a -l

其中 “-a” 表示查看所有容器,包括未启动的容器;“-l” 表示查看最近启动的一条

6. 删除所有容器

在 PowerShell 中为:

docker container rm -f $(docker ps -a -q)

(在 Linux 中为 docker container rm -f `docker ps -a -q`)可以删除所有容器 (存在容器的情况下)。

7. 附加到容器的命令行

首先运行一个 alpine 镜像:docker run -it -d alpine /bin/sh,之后使用 docker attach <CONTAINER_ID> 附加到该命令行。

注1:此时如果再开启一个终端附加到容器的命令行,二者会同步显示

注2:使用 exit 命令退出附加后,容器会停止

可以使用 Ctrl+P 和 Ctrl + Q 取消附加(取消后不停止)

推荐使用 docker container exec -it 命令

注3:使用 echo "" > /dev/pts/<X> 可以向别的终端发送消息

6. 完整查看容器的启动信息(即使太长也不省略)

docker ps -a -l --no-trunc

7. 端口号的分配

  • docker run -p 表示指定端口号映射,docker run -P 表示自动分配端口

  • docker -p :<HOST_PORT>:<CONTAINER_PORT> 利用多ip增加对同一端口的复用

    由于对 Windows 中的分配多个ip地址不熟悉,因此跟着教程步骤操作,使用操作系统为 CentOS7 的云服务器

    先使用 ifcofig eth0 查看网卡信息

    [root@VM_0_2_centos ~]# ifconfig eth0 | grep inet

            inet 172.21.0.2 netmask 255.255.240.0 broadcast 172.21.15.255

    之后再同一网段为该网卡新增一个ip

    [root@VM_0_2_centos ~]# ifconfig eth0:1 172.21.0.3 netmask 255.255.240.0 up

    使用 ping 命令 ping 172.21.0.3 可以得到响应

    使用两个地址分别运行 nginx

    [root@VM_0_2_centos ~]# docker run -d -p 172.21.0.2:8080:80 nginx

    [root@VM_0_2_centos ~]# docker run -d -p 172.21.0.3:8080:80 nginx

    进入两个容器中的 /usr/share/nginx/html 目录,修改 index.html 文件

    由于没有GUI,使用 curl 命令访问:

    [root@VM_0_2_centos ~]# curl 172.21.0.2:8080

    hello from 172.21.0.2

    [root@VM_0_2_centos ~]# curl 172.21.0.3:8080

    hello from 172.21.0.3

    成功!

  • docker -p <IP>::<CONTAINER_PORT> 宿主机分配随机端口

  • docker -p <HOST_PORT>:<CONTAINER_PORT>/udp 表示分配udp的端口

  • docker -p <IP>::<CONTAINER_PORT>/udp 表示随机分配udp的端口

  • 可以多次使用 “-p” 指定多个端口映射

注:以上操作都在宿主机上进行

8. 在容器上挂载本地目录

使用 “-v” 命令

docker run -it -d -p <HOST_PORT>:<CONTAINER_PORT> -v <HOST_ADDRESS>:<CONTAINER_ADDRESS> <IMAGE_NAME>

例如:

docker run -it -d -p 8080:80 -v D:\CustomIndex:/usr/share/nginx/html nginx

并在 D 盘的 CustomIndex 目录下新建 index.html,并写入 “Hello World!Heroes never die!”。访问效果为:

注1:使用 -v 命令时,地址性质要对应,文件要对应文件,目录要对应目录。目录映射时应尽量避免使用 C 盘

注2:如果此时删掉目录,不会取消挂载,而是访问时显示404

注3:上面的命令亦可写作:docker run -it -d -p 8080:80 -v /d/CustomIndex:/usr/share/nginx/html nginx (注意表示Windows目录的斜线的方向)

注4:在Linux中,将某个目录设置为挂载点后,读取该目录将取得挂载点的内容,原目录内容自动隐藏

9. 数据卷(Volume)的使用

由于Windows中的DockerDesktop是使用Hyper-V创建的虚拟机,在其上使用的Docker,因此数据卷映射的是虚拟机上的目录。而DockerDesktop的目录无法访问(明明是暂时不想研究0.0),再次使用CentOS云服务器

“-v” 后面不接地址而是接一个自定义的卷名

docker run -it -d -p <HOST_PORT>:<CONTAINER_PORT> -v <VOLUME_NAME>:<CONTAINER_ADDRESS> <IMAGE_NAME>

例如:docker run -it -d -p 8080:80 -v my_volume:/usr/share/nginx/html nginx

再使用 docker volume inspect 命令查看具体的挂载位置:

docker volume inspect <VOLUME_NAME>

[root@VM_0_2_centos ~]# docker volume inspect my_volume | grep Mountpoint

          "Mountpoint": "/var/lib/docker/volumes/my_volume/_data",

注:第一次设置某个数据卷时,会自动将容器中对应目录的内容映射至宿主机的对应目录(如果容器中的目录有内容),之后再设置该数据卷时就不再拷贝。比如此时修改了其中的内容,再次启动一个容器使用该数据卷

[root@VM_0_2_centos _data]# echo I've got you in my sight! > index.html

[root@VM_0_2_centos _data]# docker run -it -d -p 8082:80 -v my_volume:/usr/share/nginx/html nginx

此时依然得到修改后的内容

Docker容器基本命令注意点的更多相关文章

  1. Docker基本命令与使用 —— Docker容器的网络连接(四)

    一.Docker容器的网络基础 通过ifconfig查看docker0的网络设备,docker守护进程就是通过docker0为docker的容器提供网络连接的各种服务. docker0是Linux虚拟 ...

  2. Docker安装基本命令操作,带你了解镜像和容器的概念!

    上一章节我们了解了Docker的基本概念,以及相关原理.这一章节进行实操. <Docker这么火爆.章节一:带你详尽了解Docker容器的介绍及使用> 一.Docker安装 声明:Dock ...

  3. Docker容器中开始.NETCore之路

    一.引言 开始写这篇博客前,已经尝试练习过好多次Docker环境安装,.Net Core环境安装了,在这里替腾讯云做一个推广,假如我们想学习.练手.net core 或是Docker却苦于没有开发环境 ...

  4. Docker容器中开始.Net Core之路

    开始写这篇博客前,已经尝试练习过好多次Docker环境安装,.Net Core环境安装了,在这里替腾讯云做一个推广,假如我们想学习.练手.net core 或是Docker却苦于没有开发环境,服务器也 ...

  5. docker容器学习笔记

    docker是通过内核虚拟化技术来提供容器的资源隔离与安全保障. docker组成: docker client.docker server.docker组件(镜像(image).容器(contain ...

  6. 基于spring-boot和docker-java实现对docker容器的动态管理和监控[附完整源码下载]

    ​ (我是个封面) docker简介 Docker 是一个开源的应用容器引擎,和传统的虚拟机技术相比,Docker 容器性能开销极低,因此也广受开发者喜爱.随着基于docker的开发者越来越多,doc ...

  7. Linux环境基于CentOS7 搭建部署Docker容器

    1.Docker容器概述 区分Docker容器技术和VM虚拟机技术: evernotecid://394EFE90-9CE0-4D65-A8CD-DFEC0DC8061E/appyinxiangcom ...

  8. 在docker容器中编译hadoop 3.1.0

    在docker容器中编译hadoop 3.1.0 优点:docker安装好之后可以一键部署编译环境,不用担心各种库不兼容等问题,编译失败率低. Hadoop 3.1.0 的源代码目录下有一个 `sta ...

  9. CentOSLinux安装Docker容器

    Docker 使用 环境说明 CentOS 7.3(不准确地说:要求必须是 CentOS 7 64位) 不建议在 Windows 上使用 Docker 基本概念 官网:https://www.dock ...

随机推荐

  1. 【剑指offer】65. 不用加减乘除做加法

    剑指 Offer 65. 不用加减乘除做加法 知识点:数学:位运算 题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用 "+"."-"."* ...

  2. SpringBoot | 3.3 整合MyBatis-Plus

    目录 前言 1. 什么是MyBatis-Plus 1.1 BaseMapper接口 1.2 IService接口 2. 整合MyBatis-Plus以及CRUD功能 2.1 导入场景依赖 2.2 CR ...

  3. 将MNIST手写数据集转换成图片保存到本地

    # 加载图片 data = tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) = data.load_data() plt.im ...

  4. 浅析Java断言

    Java断言 1.断言的概念 Java的断言机制assert是一种用于测试阶段的语法特性,它允许我们在测试期间向代码中插入一些检查语句.代码发布时这些检测语句将被自动移除. 断言关键字assert有下 ...

  5. HDFS 09 - HDFS NameNode 的高可用机制

    目录 1 - 为什么要高可用 2 - NameNode 的高可用发展史 3 - HDFS 的高可用架构 3.1 Standby 和 Active 的命名空间保持一致 3.2 同一时刻只有一个 Acti ...

  6. STM32—TIMx实现编码器四倍频

    文章目录 一.储备知识 二.TIMx的编码器模式介绍 1.计数边沿设置 2.选择极性和使能 3.使能 4.计数方向 三.代码部分 一.储备知识 通过STM32的定时器编码器接口模式对编码器进行四倍频, ...

  7. Slope Trick:解决一类凸代价函数DP优化

    [前言] 在补Codeforce的DP时遇到一个比较新颖的题,然后在知乎上刚好 hycc 桑也写了这道题的相关题解,这里是作为学习并引用博客的部分内容 这道题追根溯源发现2016年这个算法已经在API ...

  8. 《手把手教你》系列技巧篇(二十)-java+ selenium自动化测试-元素定位大法之终卷(详细教程)

    1.简介 这篇文章主要是对前边的文章中的一些总结和拓展.本来是不打算写着一篇的,但是由于前后文章定位元素的时间有点长,怕大家忘记了,就在这里简单做一个总结和拓展. 2.Selenium八种定位方式 S ...

  9. docker加速器,设置cdn

    添加加速器 vim /etc/docker/daemon.json 添加如下内容 { "registry-mirrors": ["https://registry.doc ...

  10. 经典树与图论(最小生成树、哈夫曼树、最短路径问题---Dijkstra算法)

    参考网址: https://www.jianshu.com/p/cb5af6b5096d 算法导论--最小生成树 最小生成树:在连通网的所有生成树中,所有边的代价和最小的生成树,称为最小生成树. im ...