> 文档中心 > 探索云原生技术之基石-Docker容器入门篇(1)

探索云原生技术之基石-Docker容器入门篇(1)


❤️💛🧡💚💔🖤💜💙❤💕💞💓💗❣️💝💘💖❤️💛🧡💚💔🖤💜💙❤💕💞💓💗❣️💝💘💖💖💖 💖

❤️作者简介:2022新星计划第三季云原生与云计算赛道Top5🏅、华为云享专家🏅、云原生领域潜力新星🏅 💖

💛博客首页:C站个人主页🌞                                    💖

💗作者目的:如有错误请指正,将来会不断的完善笔记,帮助更多的Java爱好者入门,共同进步!      💖
❤️💛🧡💚💔🖤💜💙❤💕💞💓💗❣️💝💘💖❤️💛🧡💚💔🖤💜💙❤💕💞💓💗❣️💝💘💖💖💖 💖

文章目录

    • 探索云原生技术之基石-Docker容器入门(1)
      • 什么是云原生
      • 什么是Docker
      • Docker三大基本概念
      • 使用阿里云镜像安装Centos7
      • 如何安装Docker容器
        • 卸载Docker容器
        • 安装Docker容器
      • Docker接入阿里云镜像加速器
      • Docker入门学习
        • Docker-helloworld
        • 查看docker状态
        • 设置docker开机自动启动
        • 查看docker版本
        • docker帮助文档
      • Docker镜像命令
        • 列出镜像
          • 列出所有镜像
          • 列出指定镜像
        • 搜索镜像
          • 搜索指定镜像名的所有镜像
          • 搜索指定镜像名的镜像并指定展示条数
        • 拉取镜像
        • docker system的使用
          • 查看docker磁盘使用情况
        • 删除本地镜像
        • docker的虚悬镜像(dangling image)的查看和删除
          • 什么是虚悬镜像?
          • 虚悬镜像的查看
          • 虚悬镜像的删除
      • Docker容器命令
        • 生成Ubuntu交互式容器实例
          • 使用Ubuntu交互式容器
        • 列出容器
          • 列出所有状态为Up的容器
          • 列出所有容器(包括状态为Up、Exited)
          • 列出最近创建的一个容器
          • 列出所有容器的前n个
          • 只列出所有容器的id
        • 退出容器的两种办法

探索云原生技术之基石-Docker容器入门(1)

本博文一共有6篇,如下

  • 探索云原生技术之基石-Docker容器入门篇(1)
  • 探索云原生技术之基石-Docker容器入门篇(2)
  • 探索云原生技术之基石-Docker容器入门篇(3)

等你对Docker有一定理解的时候可以看高级篇,不过不太建议。

  • 探索云原生技术之基石-Docker容器高级篇(1)
  • 探索云原生技术之基石-Docker容器高级篇(2)
  • 探索云原生技术之基石-Docker容器高级篇(3)-视情况而定

剧透:未来将出云原生技术-Kubernetes(k8s),此时的你可以对Docker进行统一管理、动态扩缩容等等。

看完之后你会对Docker有一定的理解,并能熟练的使用Docker进行容器化开发、以及Docker部署微服务、Docker网络等等。干起来!

什么是云原生

Pivotal公司的Matt Stine于2013年首次提出**云原生(Cloud-Native)**的概念;2015年,云原生刚推广时,Matt Stine在《迁移到云原生架构》一书中定义了符合云原生架构的几个特征:12因素、微服务、自敏捷架构、基于API协作、扛脆弱性;到了2017年,Matt Stine在接受InfoQ采访时又改了口风,将云原生架构归纳为模块化、可观察、可部署、可测试、可替换、可处理6特质;而Pivotal最新官网对云原生概括为4个要点:DevOps+持续交付+微服务+容器

总而言之,符合云原生架构的应用程序应该是:采用开源堆栈(K8S+Docker)进行容器化,基于微服务架构提高灵活性和可维护性,借助敏捷方法、DevOps支持持续迭代和运维自动化,利用云平台设施实现弹性伸缩、动态调度、优化资源利用率。

此处摘选自《知乎-华为云官方帐号》

在这里插入图片描述

什么是Docker

  • Docker 是一个开源的应用容器引擎,基于Go语言开发。
  • Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化
  • 容器是完全使用沙箱机制(容器实例相互隔离),容器性能开销极低(高性能)。

总而言之:

Docker是一个高性能的容器引擎;

可以把本地源代码、配置文件、依赖、环境通通打包成一个容器即可以到处运行;

使用Docker安装软件十分方便,而且安装的软件十分精简,方便扩展。

Docker三大基本概念

  • 镜像(image):相当于Java的类
  • 容器(container):相当于通过Java的类new出来的对象
  • 仓库(repository):类似代码仓库,是Docker集中存放镜像文件的场所

使用阿里云镜像安装Centos7

  • 1:http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/ 进入下载页面

  • 2:点击下面的File Name为CentOS-7-x86_64-DVD-2009.iso 链接即可

  • 3:通过VM虚拟机安装centos7。(这里省略了。)

如何安装Docker容器

  • 注意:这里我们全都是基于Centos7系统进行操作。

卸载Docker容器

  • 1:查看已安装的docker版本
[root@aubin ~]#  yum list installed |grep docker输出结果:containerd.io.x86_64   1.4.4-3.1.el7@docker-ce-stabledocker-ce-cli.x86_64   1:20.10.6-3.el7     @docker-ce-stabledocker-scan-plugin.x86_64     0.7.0-3.el7  @docker-ce-stable
  • 2:删除docker
yum -y remove containerd.io.x86_64yum -y remove docker-ce-cli.x86_64 yum -y remove docker-scan-plugin.x86_64

安装Docker容器

  • 1:设置 Docker 仓库
sudo yum-config-manager \    --add-repo \    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 2:安装 Docker Engine-Community
sudo yum install docker-ce docker-ce-cli containerd.io
  • 3:检查是否安装好docker
[root@aubin ~]# docker versionClient: Docker Engine - Community Version:    20.10.14 API version:1.41 Go version: go1.16.15 Git commit: a224086 Built:      Thu Mar 24 01:49:57 2022 OS/Arch:    linux/amd64 Context:    default Experimental:      true
  • 4:启动docker
sudo systemctl start docker

Docker接入阿里云镜像加速器

配置镜像加速器方法。

  • 准备工作:
  • 1:首先进入阿里云容器镜像服务 跳转阿里云容器镜像服务
  • 2:点击镜像工具下面的镜像加速器
  • 3:拿到你的加速器地址和下面第二步的registry-mirrors的值替换即可。

针对Docker客户端版本大于 1.10.0 的用户,可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
在这里插入图片描述

  • 第一步:
mkdir -p /etc/docker
  • 第二步:
sudo tee /etc/docker/daemon.json <<-'EOF'{  "registry-mirrors": ["https://u01jo9qv.mirror.aliyuncs.com"]}EOF
  • 第三步:
sudo systemctl daemon-reload
  • 第四步:
sudo systemctl restart docker

最后就接入阿里云容器镜像加速器成功啦。

Docker入门学习

Docker-helloworld

  • 1:搜索hello-world的镜像
docker search hello-world
  • 2:从docker上面拉取镜像到本地
docker pull hello-world:latest

这些命令含义后面会讲,现在先不讲

  • 3:运行docker镜像,生成docker容器实例
docker pull hello-world:latest
  • 4:输出结果(完成了)
Hello from Docker!This message shows that your installation appears to be working correctly.

我们第一个docker程序完成啦!!!

查看docker状态

sudo systemctl status docker
  • active就是你当前docker的状态。

设置docker开机自动启动

sudo systemctl enable docker

查看docker版本

sudo docker version

docker帮助文档

docker --help
  • 如下:
Usage:  docker [OPTIONS] COMMANDA self-sufficient runtime for containersOptions:      --config string      Location of client config files (default "/root/.docker")  -c, --context string     Name of the context to use to connect to the daemon (overrides      DOCKER_HOST env var and default context set with "docker context use")  -D, --debugEnable debug mode  -H, --host list   Daemon socket(s) to connect to  -l, --log-level string   Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default      "info")      --tls  Use TLS; implied by --tlsverify      --tlscacert string   Trust certs signed only by this CA (default "/root/.docker/ca.pem")      --tlscert string     Path to TLS certificate file (default "/root/.docker/cert.pem")      --tlskey string      Path to TLS key file (default "/root/.docker/key.pem")      --tlsverify   Use TLS and verify the remote  -v, --version     Print version information and quitManagement Commands:  app* Docker App (Docker Inc., v0.9.1-beta3)  builder     Manage builds  buildx*     Docker Buildx (Docker Inc., v0.8.1-docker)  config      Manage Docker configs  container   Manage containers  context     Manage contexts  imageManage images  manifest    Manage Docker image manifests and manifest lists  network     Manage networks  node Manage Swarm nodes  plugin      Manage plugins  scan*Docker Scan (Docker Inc., v0.17.0)  secret      Manage Docker secrets  service     Manage services  stackManage Docker stacks  swarmManage Swarm  system      Manage Docker  trustManage trust on Docker images  volume      Manage volumesCommands:  attach      Attach local standard input, output, and error streams to a running container  buildBuild an image from a Dockerfile  commit      Create a new image from a container's changes  cp   Copy files/folders between a container and the local filesystem  create      Create a new container  diff Inspect changes to files or directories on a container's filesystem  events      Get real time events from the server  exec Run a command in a running container  export      Export a container's filesystem as a tar archive  history     Show the history of an image  images      List images  import      Import the contents from a tarball to create a filesystem image  info Display system-wide information  inspect     Return low-level information on Docker objects  kill Kill one or more running containers  load Load an image from a tar archive or STDIN  loginLog in to a Docker registry  logout      Log out from a Docker registry  logs Fetch the logs of a container  pausePause all processes within one or more containers  port List port mappings or a specific mapping for the container  ps   List containers  pull Pull an image or a repository from a registry  push Push an image or a repository to a registry  rename      Rename a container  restart     Restart one or more containers  rm   Remove one or more containers  rmi  Remove one or more images  run  Run a command in a new container  save Save one or more images to a tar archive (streamed to STDOUT by default)  search      Search the Docker Hub for images  startStart one or more stopped containers  statsDisplay a live stream of container(s) resource usage statistics  stop Stop one or more running containers  tag  Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE  top  Display the running processes of a container  unpause     Unpause all processes within one or more containers  update      Update configuration of one or more containers  version     Show the Docker version information  wait Block until one or more containers stop, then print their exit codes

Docker镜像命令

列出镜像

列出所有镜像
docker images
列出指定镜像
docker images hello-world

搜索镜像

搜索指定镜像名的所有镜像
  • 从Docker Hub中搜索镜像
  • 例如:我们搜索Ubuntu镜像
docker search ubuntu
搜索指定镜像名的镜像并指定展示条数
  • –limit 1:意思是只取搜索出来的镜像第一条
docker search --limit 1 ubuntu

拉取镜像

  • 1:比如我们要拉取Ubuntu的镜像,我们先搜索一下有没有这个镜像
docker search ubuntu --limit 1
  • 2:开始我们的重点内容:拉取镜像
docker pull ubuntu:latest
  • pull:拉取镜像
  • ubuntu:镜像名
  • latest:拉取该镜像在仓库的最新版本(其实相当于=docker pull ubuntu
    在这里插入图片描述说明我们拉取镜像成功了

docker system的使用

查看docker磁盘使用情况
sudo docker system df

在这里插入图片描述

删除本地镜像

例如我们要删除hello-world镜像

docker rmi -f hello-world
  • rmi:意思就是remove image(删除镜像)
  • -f:意思是force,强制删除。(如果要删除镜像最好加上这个,不然有时候会删除不了)

docker的虚悬镜像(dangling image)的查看和删除

什么是虚悬镜像?
  • 简而言之:虚悬镜像就是REPOSITORY(仓库名)和TAG(标签)都为**镜像**。
  • 虚悬镜像可以随意删除。因为虚悬镜像没有价值。
虚悬镜像的查看
docker images -f dangling=true
虚悬镜像的删除
docker rmi $(docker images -q -f dangling=true)

Docker容器命令

生成Ubuntu交互式容器实例

docker run -it --name "youzhengjie" ubuntu /bin/bash
  • run:将指定镜像生成容器实例
  • -i:开启交互模式
  • -t:伪终端
  • -it:开启交互模式和伪终端(命令行),一般来说-it是成对出现的
  • –name:指定容器实例的NAMES(名称),不写则默认
  • /bin/bash:容器内执行/bin/bash命令
使用Ubuntu交互式容器
  • 执行完上面命令就进入了Ubuntu容器里面
  • 我们可以对它输入Linux命令,就像本机的centos7系统一样
  • 但是会出现以下这种情况。

在这里插入图片描述

  • 我们可以发现,vim命令无法在这个Ubuntu容器里面使用,那么这是为什么呢?
  • 因为我们docker安装的软件都是简化版(只留下运行时所必须要用到的),其余的东西都没有,这就是为什么docker里面的Ubuntu仅仅只有几十MB的占用内存的原因了
  • 但是别慌,docker中的Ubuntu虽然没有这些命令,但是可以通过我们后期去加装自己所需要的。(这个后面会说!)

列出容器

列出所有状态为Up的容器
docker ps
  • ps:指的是容器实例
列出所有容器(包括状态为Up、Exited)
docker ps -a

在这里插入图片描述

列出最近创建的一个容器
docker ps -l
列出所有容器的前n个
docker ps -a -n 1
  • -n:指定输出几个
只列出所有容器的id
docker ps -aq

退出容器的两种办法

  • 1:退出并且关闭容器(exit命令)
  • 2:只退出不关闭容器(ctrl p+q)

❤️💛🧡我们下一章见❤️💛🧡