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

Posted 摸鱼打酱油

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了探索云原生技术之基石-Docker容器入门篇相关的知识,希望对你有一定的参考价值。

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

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

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

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

文章目录

探索云原生技术之基石-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-stable
docker-ce-cli.x86_64                        1:20.10.6-3.el7            @docker-ce-stable
docker-scan-plugin.x86_64                   0.7.0-3.el7                @docker-ce-stable
  • 2:删除docker
yum -y remove containerd.io.x86_64
yum -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 version
Client: 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] COMMAND

A self-sufficient runtime for containers

Options:
      --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, --debug              Enable 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 quit

Management 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
  image       Manage 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
  stack       Manage Docker stacks
  swarm       Manage Swarm
  system      Manage Docker
  trust       Manage trust on Docker images
  volume      Manage volumes

Commands:
  attach      Attach local standard input, output, and error streams to a running container
  build       Build 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
  login       Log in to a Docker registry
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause 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
  start       Start one or more stopped containers
  stats       Display 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(标签)都为**< none >镜像**。
  • 虚悬镜像可以随意删除。因为虚悬镜像没有价值。
虚悬镜像的查看
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)

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

以上是关于探索云原生技术之基石-Docker容器入门篇的主要内容,如果未能解决你的问题,请参考以下文章

资深架构师谈云原生生态的基石Kubernetes

云原生一文带你搞懂Docker容器的核心基石Cgroups

2022VDC云与基础架构专场:筑牢云原生与基础架构发展基石 多维助力效能提升

云原生技术分享 | Docker入门系列:初识容器技术

云原生的基石,一文读懂容器DockerPod到底是什么!

云原生生态的基石 Kubernetes