Docker 容器化(初学者的分享)

目录

一、什么是docker

二、docker的缺陷

三、简单的操作

一、首先配置一台虚拟机

二、安装Docker-CE

一、安装utils

[二、 将 Docker 的软件源添加到 CentOS 的 yum 仓库中。这样可以通过 yum 命令来安装、更新和管理 Docker 相关的软件包。](#二、 将 Docker 的软件源添加到 CentOS 的 yum 仓库中。这样可以通过 yum 命令来安装、更新和管理 Docker 相关的软件包。)

[三、将 download.docker.com 替换为 mirrors.aliyun.com/docker-ce。这个命令的目的是将 Docker 软件源的地址替换为阿里云镜像站点,以提高下载速度和稳定性。](#三、将 download.docker.com 替换为 mirrors.aliyun.com/docker-ce。这个命令的目的是将 Docker 软件源的地址替换为阿里云镜像站点,以提高下载速度和稳定性。)

四、安装docker-ce

[五、启用并立即启动 Docker 服务。这个命令会将 Docker 服务添加到系统启动项,并立即启动 Docker 服务,以便可以立即开始使用 Docker。](#五、启用并立即启动 Docker 服务。这个命令会将 Docker 服务添加到系统启动项,并立即启动 Docker 服务,以便可以立即开始使用 Docker。)

[六、显示当前安装的 Docker 版本信息,包括 Docker 客户端和服务端的版本号、构建日期等详细信息。](#六、显示当前安装的 Docker 版本信息,包括 Docker 客户端和服务端的版本号、构建日期等详细信息。)

七、创建一个文件

八、在文件中添加下方的内容

九、启动docker

三、docker的基本使用

一、在仓库中查找镜像

二、下载镜像

三、查看本地docker镜像

四、调用容器内的命令

五、进入容器

六、容器正常运行

七、定义内存大小

八、查看正在运行的容器

九、确定被锁定的容器信息

十、限制容器只能使用1个CPU

[十一、限制容器在CPU上第一 第二核心上使用资源](#十一、限制容器在CPU上第一 第二核心上使用资源)

十二、限制容器使用磁盘I/O

十三、查看所有的容器包括已经退出的

十四、停止和启动容器

十五、删除以退出的容器

十六、删除已退出的容器及正在运行的容器

十七、为容器命名为snowmpy

十八、输入容器信息并导出容器

十九、导入容器

二十、指定docker的其他各种参数

二十一、更改镜像名和标签

二十二、删除镜像

二十三、确定容器根目录及文件系统在本地系统上挂载

二十四、进入容器并添加内容

二十五、开启一个新容器,并在容器中安装ssh服务

二十六、更改源并安装ssh

二十七、在容器中为sshd生成ssh所需的主机密码

二十八、容器的root密码

二十九、获取dockerID和docker名

三十、生成docker镜像


一、什么是docker

Docker是一个开源的容器化平台,可以让开发人员和系统管理员通过容器的方式来构建、打包、分发和运行应用程序。

Docker最初由公司叫做dotCloud(现在已更名为Docker)的一群工程师于2013年创建。他们旨在解决传统虚拟化技术的一些痛点,如资源占用、启动时间长等问题。他们基于Linux内核的cgroups和命名空间技术开发出了Docker。

Docker的设计理念是使用容器来封装应用程序及其依赖项,使其能够在任何环境中都能一致地运行。通过容器化,开发人员可以将应用程序及其依赖项打包到一个独立的、可移植的容器中,包括操作系统、库、软件工具等。这样,就能够确保应用程序在不同环境中具有相同的行为。

Docker的出现解决了开发、测试和部署过程中的许多问题,减少了环境配置的复杂性、提高了应用的可移植性和可扩展性。它极大地简化了应用程序的打包和分发过程,并通过容器的方式实现了更高效的资源利用。

随着时间的推移,Docker变得越来越流行,成为了容器化技术的标准和行业领导者。它对于微服务架构、持续集成和部署等现代应用开发和交付模式具有重要的意义。

二、docker的缺陷

尽管Docker在容器化领域取得了巨大的成功和普及,但它也有一些缺点和限制:

  1. 性能损耗:与直接在主机上运行应用程序相比,Docker容器中的应用程序可能会有一些性能损耗。这是因为容器化引入了额外的隔离和资源管理层。

  2. 安全性风险:如果容器配置不当或容器内部存在漏洞,容器化环境可能会面临一些安全风险。攻击者可能会利用容器逃逸、容器间通信等漏洞进行攻击。

  3. 复杂性和学习曲线:使用Docker涉及到一些新的概念和工具,对于初学者来说可能需要一定的学习曲线。此外,复杂的容器集群和编排工具(如Kubernetes)的使用也需要一定的技术掌握。

  4. 资源消耗:每个容器都需要一定的资源(如内存、磁盘空间),在大规模部署或资源有限的环境中,这可能会导致资源紧张。

  5. 持久化存储:Docker容器默认情况下是设计为无状态的,容器停止后数据将会丢失。为了实现持久化存储,需要额外的配置和管理。

尽管存在这些缺点,Docker仍然是非常强大和受欢迎的容器化平台,可以在许多不同的应用场景中提供便利和效益。对于大多数用户来说,Docker的好处往往超过了其缺点。

三、简单的操作

一、首先配置一台虚拟机

二、安装Docker-CE

一、安装utils

复制代码
yum install yum-utils -y

二、 将 Docker 的软件源添加到 CentOS 的 yum 仓库中。这样可以通过 yum 命令来安装、更新和管理 Docker 相关的软件包。

复制代码
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

三、将 download.docker.com 替换为 mirrors.aliyun.com/docker-ce。这个命令的目的是将 Docker 软件源的地址替换为阿里云镜像站点,以提高下载速度和稳定性。

复制代码
sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

四、安装docker-ce

复制代码
yum install docker-ce -y

五、启用并立即启动 Docker 服务。这个命令会将 Docker 服务添加到系统启动项,并立即启动 Docker 服务,以便可以立即开始使用 Docker。

复制代码
systemctl enable --now docker

六、显示当前安装的 Docker 版本信息,包括 Docker 客户端和服务端的版本号、构建日期等详细信息。

复制代码
docker version

七、创建一个文件

复制代码
vim /etc/docker/daemon.json

八、在文件中添加下方的内容

配置 Docker 使用阿里云的镜像站点作为镜像加速器。镜像加速器可以加快 Docker 镜像的下载速度,提高容器的创建和部署效率。配置完成后,Docker 将自动使用阿里云的镜像站点来加速下载。

复制代码
{
      "registry-mirrors": ["https://3laho3y3.mirror.aliyuncs.com"]
}

九、启动docker

复制代码
systemctl restart docker

三、docker的基本使用

一、在仓库中查找镜像

复制代码
docker search centos

二、下载镜像

复制代码
docker pull centos

三、查看本地docker镜像

复制代码
docker image list

四、调用容器内的命令

在一个基于 CentOS 镜像的容器中运行命令 cat /etc/hosts

具体解释

  • docker run 是 Docker 的命令,用于创建并启动一个新的容器。
  • -i 参数表示在容器启动后,将标准输入(stdin)连接到容器的标准输入,这样可以与容器进行交互。
  • -t 参数表示在容器启动后,为容器分配一个伪终端(pseudo-TTY),以便可以进行交互输入输出。
  • centos 是要使用的容器镜像的名称,这里使用的是 CentOS 镜像。
  • cat /etc/hosts 是要在容器内部执行的命令。这个命令会显示容器内 /etc/hosts 文件的内容。

因此,这个命令的目的是启动一个基于 CentOS 镜像的容器,并在容器内部执行 cat /etc/hosts 命令,以查看容器内 /etc/hosts 文件的内容。

复制代码
docker run -i -t centos cat /etc/hosts

五、进入容器

在一个基于 CentOS 镜像的容器中启动一个交互式的 Bash shell。

具体解释如下:

  • docker run 是 Docker 的命令,用于创建并启动一个新的容器。
  • -it 参数表示以交互模式运行容器,并分配一个伪终端(pseudo-TTY)。
  • centos 是要使用的容器镜像的名称,这里使用的是 CentOS 镜像。
  • /bin/bash 是要在容器内部执行的命令,它启动了一个 Bash shell。

通过执行这个命令,Docker会创建一个基于CentOS镜像的容器,并切换到容器的交互式的Bash shell终端,使用户可以与容器进行交互。这样可以在容器内部执行命令、查看文件、安装软件包等操作。当退出Shell终端时,容器也将停止运行。

如果在上图显示的界面输入exit的话,则直接退出容器

六、容器正常运行

如果想让容器正常运行的话,在输入 docker run -it centos /bin/bash 后

复制代码
按住ctrl键不要松手,在摁p键和q键 则会出现

一个伪终端

摁下回车,则成功的锁定容器并在容器内执行一些命令及操作,退出但是可以使容器正常运行

七、定义内存大小

在一个基于 CentOS 镜像的容器中以交互模式启动一个 Bash shell,并且限制容器的内存使用量为300MB。

复制代码
docker run -it -m 300M --memory-swap 300M  centos /bin/bash

八、查看正在运行的容器

复制代码
docker ps

显示up的都是正在启动

九、确定被锁定的容器信息

复制代码
docker stats 输入显示ID的前四个字符

十、限制容器只能使用1个CPU

复制代码
docker run -it -m="500m" --cpus="1" centos /bin/bash

十一、限制容器在CPU上第一 第二核心上使用资源

复制代码
docker run -it --cpuset-cpus="0,1" centos /bin/bash

十二、限制容器使用磁盘I/O

复制代码
docker run -it --device-write-bps /dev/sda:30MB centos /bin/bash

十三、查看所有的容器包括已经退出的

复制代码
docker ps -a

状态为UP的则正启动的,其他则为未启动

十四、停止和启动容器

用第一个容器举例,现在是正在启动的状态,关闭容器

复制代码
docker kill 7e92

查看状态

复制代码
docker ps -a

成功关闭容器

如要开启则输入

复制代码
docker start 7e92

成功启动

十五、删除以退出的容器

以23f9 为例 现在是正在关闭和退出的状态,输入命令

复制代码
 docker rm 23f9

查看状态

复制代码
docker ps -a

成功删除

十六、删除已退出的容器及正在运行的容器

复制代码
docker rm $(docker ps -a  | awk '{print $1}' | sed 1d) -f

十七、为容器命名为snowmpy

复制代码
docker run -itd --name snowmpy centos /bin/bash

成功创建一个名为snowmpy的容器

十八、输入容器信息并导出容器

复制代码
docker logs snowmpy

docker export snowmpy > mpy.tar

ls -l mpy.tar

十九、导入容器

cat mpy.tar | docker import - mpy:test 的意思是通过管道(|)将文件 mpy.tar 的内容导入到 Docker 中,并创建一个名为 mpy:test 的镜像。

复制代码
cat mpy.tar | docker import - mpy:test

列出本地的镜像列表

复制代码
docker image list

二十、指定docker的其他各种参数

复制代码
docker run -ti --name gzliu -h server --dns-search=1000cc.net --dns=8.8.8.8 --dns=8.8.4.4 centos:latest /bin/bash

二十一、更改镜像名和标签

列出本地的镜像列表

复制代码
docker images
  1. 给一个已有的镜像打上新的标签。
  • mpy:test 是已有的镜像名称和标签。
  • mpy:ok 是新的镜像名称和标签。

通过执行这个命令,Docker 会在已有镜像的基础上创建一个新的镜像标签 mpy:ok,两个标签实际上指向同一个镜像。这样可以方便地给镜像创建不同的标签,用于版本管理或其他需求。新的标签可以用于识别和使用相同镜像的不同版本或变体。

复制代码
docker tag mpy:test mpy:ok

docker images

二十二、删除镜像

复制代码
docker rmi mpy:test

二十三、确定容器根目录及文件系统在本地系统上挂载

复制代码
docker run -d -h websrv --name websrv -p 80:80  nginx

二十四、进入容器并添加内容

  1. docker exec -it websrv /bin/bash:以交互式的方式进入名为websrv的Docker容器,并以bash作为默认的shell。

  2. echo "hello world" > /usr/share/nginx/html/index.html:将字符串"hello world"写入到文件/usr/share/nginx/html/index.html中。

换句话说,这个命令的目的是在容器中的/nginx/html目录下创建一个名为index.html的文件,并在其中写入字符串"hello world"。

复制代码
docker exec -it websrv /bin/bash
root@websrv:/# echo "hello world" > /usr/share/nginx/html/index.html

输入 exit 退出,并docker ps查看,显示成功挂载

该命令用于获取有关名为websrv的Docker容器的详细信息。它返回一个JSON格式的输出,其中包含有关容器的各种属性,如IP地址、挂载点、网络配置等。

复制代码
docker inspect websrv

输入后再显示内容中找到

并复制第一行内容路径并输入

复制代码
cd //var/lib/docker/overlay2/42ad29142a56ec09fc588eac31069f5652fc4926c5f2c7052cafc94fef0fc0a9/merged/usr/share/nginx/html

是容器的文件系统路径,其中包含了容器内部的文件和目录。这条命令的目的是将当前的工作目录切换到容器内的/nginx/html目录,以便进行操作。

二十五、开启一个新容器,并在容器中安装ssh服务

复制代码
docker run --name snowchuai -h snow -it centos /bin/bash

这段命令是用来在 Docker 中运行一个名为 "snowchuai" 的容器,容器的主机名设置为 "snow",并且以交互模式运行 CentOS 镜像,并启动一个 bash shell。

具体说明如下:

  • docker run:在 Docker 中运行一个容器
  • --name snowchuai:给容器指定一个名称 "snowchuai"
  • -h snow:设置容器的主机名为 "snow"
  • -it:以交互模式运行容器
  • centos:使用 CentOS 镜像作为容器的基础镜像
  • /bin/bash:在容器内启动一个 bash shell。这意味着你可以在容器内执行命令和操作。

这个命令的作用是创建一个 CentOS 容器并进入到容器内部的 bash shell 中进行后续操作。

二十六、更改源并安装ssh

这个源是有问题的,需要更改两个源 所以需要进入

复制代码
cd /etc/yum.repos.d/

首先进入

复制代码
vi CentOS-Linux-AppStream.repo

将里面内容更改为

复制代码
# CentOS-Linux-AppStream.repo
#
# The mirrorlist system uses the connecting IP address of the client and the
# update status of each mirror to pick current mirrors that are geographically
# close to the client.  You should use this for CentOS updates unless you are
# manually picking other mirrors.
#
# If the mirrorlist does not work for you, you can try the commented out
# baseurl line instead.

[appstream]
name=CentOS Linux $releasever - AppStream
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=AppStream&infra=$infra
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/8-stream/AppStream/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

进入第二个

复制代码
vi CentOS-Linux-BaseOS.repo 

内容更改为

复制代码
# CentOS-Linux-BaseOS.repo
#
# The mirrorlist system uses the connecting IP address of the client and the
# update status of each mirror to pick current mirrors that are geographically
# close to the client.  You should use this for CentOS updates unless you are
# manually picking other mirrors.
#
# If the mirrorlist does not work for you, you can try the commented out
# baseurl line instead.

[baseos]
name=CentOS Linux $releasever - BaseOS
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra
baseurl=http://mirrors.tuna.tsinghua.edu.cn/centos/8-stream/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

更改后 输入安装命令

复制代码
yum install openssh openssh-server passwd -y

成功安装

二十七、在容器中为sshd生成ssh所需的主机密码

ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -q -N ''

  • -t rsa:指定生成 RSA 类型的密钥对

  • -f /etc/ssh/ssh_host_rsa_key:指定保存 RSA 密钥的文件路径为 "/etc/ssh/ssh_host_rsa_key"

  • -q:指定以静默模式生成密钥对,不输出额外信息

  • -N '':设置私钥的密码为空

    ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -q -N ''

ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -q -N ''

  • -t ecdsa:指定生成 ECDSA 类型的密钥对

  • -f /etc/ssh/ssh_host_ecdsa_key:指定保存 ECDSA 密钥的文件路径为 "/etc/ssh/ssh_host_ecdsa_key"

  • -q:指定以静默模式生成密钥对,不输出额外信息

  • -N '':设置私钥的密码为空

    ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -q -N ''

ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -q -N ''

  • -t ed25519:指定生成 Ed25519 类型的密钥对
  • -f /etc/ssh/ssh_host_ed25519_key:指定保存 Ed25519 密钥的文件路径为 "/etc/ssh/ssh_host_ed25519_key"
  • -q:指定以静默模式生成密钥对,不输出额外信息
  • -N '':设置私钥的密码为空

这些命令将生成三对不同类型的 SSH 密钥对,用于在 SSH 通信中进行身份验证和加密。这些密钥对分别是 RSA、ECDSA 和 Ed25519 类型的密钥对。生成的公钥和私钥将保存在指定的文件中,私钥的密码被设置为空。

复制代码
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -q -N ''

二十八、容器的root密码

复制代码
passwd

设置密码后,退出容器 exit

二十九、获取dockerID和docker名

复制代码
dockerid=$(docker ps -a | awk '{print $1}' | sed 1d) && echo $dockerid

三十、生成docker镜像

输入命令登录回容器

复制代码
docker run -it -m 300M --memory-swap 300M  centos /bin/bash

查看所有容器

复制代码
docker ps -a

找到设置好的snowmpy

输入生成docker镜像的命令 将中间改为ID

复制代码
docker commit -m 'centos-ssh' 5b0eca08b488  mpy/centos-sshd
复制代码
docker image list

查看结果

复制代码
相关推荐
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工4 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn864 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
酣大智4 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_4 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉4 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦4 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw
2601_961875244 天前
决战申论100题2026|最新|范文
linux·容器·centos·debian·ssh·fabric·vagrant