Docker快速入门总结笔记

打印 上一主题 下一主题

主题 707|帖子 707|积分 2121

文章目录



1. Docker概述

(1)基本介绍
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。官网:https://docs.docker.com/
(2)应用场景


  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
(3)Docker 的优势
Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
1、快速,一致地交付您的应用程序。Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。
容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:
您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。
他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。
当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。
测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。
2、响应式部署和扩展
Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。
Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。
3、在同一硬件上运行更多工作负载
Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。
2. 虚拟化技术和容器化技术

虚拟化技术特点:1.资源占用多 2.冗余步骤多 3.启动很慢
容器化技术:容器化技术不是模拟的一个完整的操作系统
比较Docker和虚拟机的不同:
1.传统虚拟机,虚拟出硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件。
2.Docker容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟硬件。
3.每个容器都是相互隔离的,每个容器都有属于自己的文件系统,互不影响。
容器化带来的好处:

3. Docker的基本组成

Docker的基本组成图如下:

说明:

4. Docker的安装

查看系统的内核:
uname -r
系统内核版本为3.10.0
  1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# uname -r
  2. 3.10.0-957.21.3.el7.x86_64
复制代码
查看系统配置
cat /etc/os-release
  1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# cat /etc/os-release
  2. NAME="CentOS Linux"
  3. VERSION="7 (Core)"
  4. ID="centos"
  5. ID_LIKE="rhel fedora"
  6. VERSION_ID="7"
  7. PRETTY_NAME="CentOS Linux 7 (Core)"
  8. ANSI_COLOR="0;31"
  9. CPE_NAME="cpe:/o:centos:centos:7"
  10. HOME_URL="https://www.centos.org/"
  11. BUG_REPORT_URL="https://bugs.centos.org/"
  12. CENTOS_MANTISBT_PROJECT="CentOS-7"
  13. CENTOS_MANTISBT_PROJECT_VERSION="7"
  14. REDHAT_SUPPORT_PRODUCT="centos"
  15. REDHAT_SUPPORT_PRODUCT_VERSION="7"
复制代码
Docker的安装步骤:
(1)卸载旧的版本
  1. yum remove docker \
  2.                   docker-client \
  3.                   docker-client-latest \
  4.                   docker-common \
  5.                   docker-latest \
  6.                   docker-latest-logrotate \
  7.                   docker-logrotate \
  8.                   docker-engine
复制代码
(2)下载需要的安装包
  1. yum install -y yum-utils
复制代码
(3)设置镜像的仓库
  1. yum-config-manager \
  2.     --add-repo \
  3.     https://download.docker.com/linux/centos/docker-ce.repo  #国外的地址
  4.    
  5.     # 设置阿里云的Docker镜像仓库
  6. yum-config-manager \
  7.     --add-repo \
  8.     https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  #国外的地址
复制代码
(4)更新yum软件包索引
  1. yum makecache fast
复制代码
(5)安装docker相关的配置
docker-ce 是社区版,docker-ee 企业版
  1. yum install docker-ce docker-ce-cli containerd.io
复制代码
出现了completed即安装成功。
(6)启动Docker
  1. systemctl start docker
  2. # 查看当前版本号,是否启动成功
  3. docker version
  4. # 设置开机自启动
  5. systemctl enable docker
复制代码
结果:

下载hello-world镜像进行测试

查看下载的hello world镜像
  1. [root@iZwz99sm8v95sckz8bd2c4Z lib]# docker images
  2. REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
  3. hello-world   latest    bf756fb1ae65   11 months ago   13.3kB
复制代码
5. Docker的卸载

  1. # 1. 卸载依赖
  2. yum remove docker-ce docker-ce-cli containerd.io
  3. # 2. 删除资源  . /var/lib/docker是docker的默认工作路径
  4. rm -rf /var/lib/docker
复制代码
6. 配置阿里云镜像加速

(1)进入阿里云官网,搜索容器镜像服务

(2)依次执行官方的这四条命令
  1. sudo mkdir -p /etc/docker
  2. sudo tee /etc/docker/daemon.json <<-'EOF'
  3. {
  4.   "registry-mirrors": ["https://axvfsf7e.mirror.aliyuncs.com"]
  5. }
  6. EOF
  7. sudo systemctl daemon-reload
  8. sudo systemctl restart docker
复制代码
13. 常用容器部署

13.1 Nginx部署

(1)搜索并下载镜像
  1. docker version          #查看docker的版本信息
  2. docker info             #查看docker的系统信息,包括镜像和容器的数量
  3. docker 命令 --help       #帮助命令(可查看可选的参数)
  4. docker COMMAND --help
复制代码
可以到dockerhub官网查看Nginx的详细版本信息 :https://hub.docker.com/_/nginx
(2)运行测试
  1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker images
  2. REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
  3. hello-world   latest    bf756fb1ae65   11 months ago   13.3kB
  4. #解释:
  5. 1.REPOSITORY  镜像的仓库源
  6. 2.TAG  镜像的标签
  7. 3.IMAGE ID 镜像的id
  8. 4.CREATED 镜像的创建时间
  9. 5.SIZE 镜像的大小
  10. # 可选参数
  11. -a/--all 列出所有镜像
  12. -q/--quiet 只显示镜像的id
复制代码
运行结果:
  1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker search mysql
  2. NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
  3. mysql                             MySQL is a widely used, open-source relation…   10308     [OK]
  4. mariadb                           MariaDB is a community-developed fork of MyS…   3819      [OK]
  5. mysql/mysql-server                Optimized MySQL Server Docker images. Create…   754                  [OK]
  6. percona                           Percona Server is a fork of the MySQL relati…   517       [OK]
  7. centos/mysql-57-centos7           MySQL 5.7 SQL database server                   86
  8. mysql/mysql-cluster               Experimental MySQL Cluster Docker images. Cr…   79
  9. centurylink/mysql                 Image containing mysql. Optimized to be link…   60                   [OK]
  10. #可选参数
  11. Search the Docker Hub for images
  12. Options:
  13.   -f, --filter filter   Filter output based on conditions provided
  14.       --format string   Pretty-print search using a Go template
  15.       --limit int       Max number of search results (default 25)
  16.       --no-trunc        Don't truncate output
  17.       
  18.       
  19. #搜索收藏数大于3000的镜像
  20. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker search mysql --filter=STARS=3000
  21. NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
  22. mysql     MySQL is a widely used, open-source relation…   10308     [OK]
  23. mariadb   MariaDB is a community-developed fordockerk of MyS…   3819      [OK]
复制代码
端口暴露的概念:

(3)配置文件
进入容器,自定义配置文件
  1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull mysql
  2. Using default tag: latest            #如果不写tag默认就是latest
  3. latest: Pulling from library/mysql
  4. 6ec7b7d162b2: Pull complete          #分层下载,docker image的核心-联合文件系统
  5. fedd960d3481: Pull complete
  6. 7ab947313861: Pull complete
  7. 64f92f19e638: Pull complete
  8. 3e80b17bff96: Pull complete
  9. 014e976799f9: Pull complete
  10. 59ae84fee1b3: Pull complete
  11. ffe10de703ea: Pull complete
  12. 657af6d90c83: Pull complete
  13. 98bfb480322c: Pull complete
  14. 6aa3859c4789: Pull complete
  15. 1ed875d851ef: Pull complete
  16. Digest: sha256:78800e6d3f1b230e35275145e657b82c3fb02a27b2d8e76aac2f5e90c1c30873 #签名
  17. Status: Downloaded newer image for mysql:latest
  18. docker.io/library/mysql:latest  #下载来源的真实地址  #docker pull mysql等价于docker pull docker.io/library/mysql:latest
复制代码
(4)访问测试
本地主机访问测试,curl命令发起请求,如果使用阿里云服务器需要设置安全组。
  1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull mysql:5.7
  2. 5.7: Pulling from library/mysql
  3. 6ec7b7d162b2: Already exists
  4. fedd960d3481: Already exists
  5. 7ab947313861: Already exists
  6. 64f92f19e638: Already exists
  7. 3e80b17bff96: Already exists
  8. 014e976799f9: Already exists
  9. 59ae84fee1b3: Already exists
  10. 7d1da2a18e2e: Pull complete
  11. 301a28b700b9: Pull complete
  12. 529dc8dbeaf3: Pull complete
  13. bc9d021dc13f: Pull complete
  14. Digest: sha256:c3a567d3e3ad8b05dfce401ed08f0f6bf3f3b64cc17694979d5f2e5d78e10173
  15. Status: Downloaded newer image for mysql:5.7
  16. docker.io/library/mysql:5.7
复制代码
(5)安装vim
我们使用Nginx往往需要编写配置文件,但是Nginx官方镜像没有安装vim,需要我们手动进行安装。使用以下命令进行安装:
  1. #1.删除指定的镜像id
  2. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f  镜像id
  3. #2.删除多个镜像id
  4. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f  镜像id 镜像id 镜像id
  5. #3.删除全部的镜像id
  6. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f  $(docker images -aq)
复制代码
如果执行上述命令出现提示:
  1. docker pull centos
复制代码
则需要先同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包。执行以下命令来更新:
  1. docker run [可选参数] image
  2. #参数说明
  3. --name="名字"           指定容器名字
  4. -d                     后台方式运行
  5. -it                    使用交互方式运行,进入容器查看内容
  6. -p                     指定容器的端口
  7. (
  8. -p ip:主机端口:容器端口  配置主机端口映射到容器端口
  9. -p 主机端口:容器端口
  10. -p 容器端口
  11. )
  12. -P                     随机指定端口(大写的P)
复制代码
更新完毕再安装即可。我们修改了配置文件,只要重新启动容器docker restart 容器id,改动就可以生效了。
解决vim在终端不能复制的问题:在vim 中输入 :set mouse=r。
拓展:启动项目并设置数据卷,为避免nginx因为修改配置文件导致的错误而无法启动容器,我们可以通过cp命令覆盖配置文件,但是设置数据卷会更为方便。启动Nginx容器的同时设置数据卷的命令:
  1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -it centos /bin/bash
  2. [root@bd1b8900c547 /]# ls      
  3. bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
复制代码
参数说明:
  1. #exit 停止并退出容器(后台方式运行则仅退出)
  2. #Ctrl+P+Q  不停止容器退出
  3. [root@bd1b8900c547 /]# exit
  4. exit
  5. [root@iZwz99sm8v95sckz8bd2c4Z ~]#
复制代码
13.2 Tomcat部署

(1)下载并运行
  1. #docker ps
  2.      # 列出当前正在运行的容器
  3. -a   # 列出所有容器的运行记录
  4. -n=? # 显示最近创建的n个容器
  5. -q   # 只显示容器的编号
  6. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
  7. CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
  8. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps -a
  9. CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS                     PORTS     NAMES
  10. bca129320bb5   centos         "/bin/bash"   4 minutes ago   Exited (0) 3 minutes ago             optimistic_shtern
  11. bd1b8900c547   centos         "/bin/bash"   6 minutes ago   Exited (0) 5 minutes ago             cool_tesla
  12. cf6adbf1b506   bf756fb1ae65   "/hello"      5 hours ago     Exited (0) 5 hours ago               optimistic_darwin
复制代码
(2)进入容器
1.容器中的命令是少了
2.阿里云镜像默认下载的是最小的镜像,保证最小的运行环境。
  1. docker rm 容器id                 #删除指定的容器,不能删除正在运行的容器,强制删除使用 rm -f
  2. docker rm -f $(docker ps -aq)   #删除所有的容器
  3. docker ps -a -q|xargs docker rm #删除所有的容器
复制代码
(3)访问测试
  1. docker start 容器id          #启动容器
  2. docker restart 容器id        #重启容器
  3. docker stop 容器id           #停止当前运行的容器
  4. docker kill 容器id           #强制停止当前容器
复制代码
13.3 ElasticSearch部署

添加 ’-e ES_JAVA_OPTS=“-Xms128m -Xmx512m” ‘ 配置ElasticSearch的虚拟机占用的内存大小。
docker stats 查看资源占用情况
  1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker logs --help
  2. Usage:  docker logs [OPTIONS] CONTAINER
  3. Fetch the logs of a container
  4. Options:
  5.       --details        Show extra details provided to logs
  6.   -f, --follow         Follow log output
  7.       --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
  8.   -n, --tail string    Number of lines to show from the end of the logs (default "all")
  9.   -t, --timestamps     Show timestamps
  10.       --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
  11. 常用:
  12. docker logs -tf 容器id
  13. docker logs --tail number 容器id #num为要显示的日志条数
  14. #docker容器后台运行,必须要有一个前台的进程,否则会自动停止
  15. #编写shell脚本循环执行,使得centos容器保持运行状态
  16. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d centos /bin/sh -c "while true;do echo hi;sleep 5;done"
  17. c703b5b1911ff84d584390263a35707b6024816e1f46542b61918a6327a570dc
  18. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
  19. CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
  20. c703b5b1911f   centos    "/bin/sh -c 'while t…"   13 seconds ago   Up 10 seconds             pedantic_banach
  21. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker logs -tf --tail 10 c703b5b1911f
  22. 2020-12-27T03:34:07.255599560Z hi
  23. 2020-12-27T03:34:12.257641517Z hi
  24. 2020-12-27T03:34:17.259706294Z hi
  25. 2020-12-27T03:34:22.261693707Z hi
  26. 2020-12-27T03:34:27.262609289Z hi
  27. 2020-12-27T03:34:32.267862677Z hi
  28. 2020-12-27T03:34:37.270382873Z hi
  29. 2020-12-27T03:34:42.272414182Z hi
  30. 2020-12-27T03:34:47.274823243Z hi
  31. 2020-12-27T03:34:52.277419274Z hi
复制代码
13.4 MySQL部署

(1)下载并运行
  1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker top c703b5b1911f
  2. UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
  3. root                11156               11135               0                   11:31               ?                   00:00:00            /bin/sh -c while true;do echo hi;sleep 5;done
  4. root                11886               11156               0                   11:43               ?                   00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 5
复制代码
参数说明:
  1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker inspect 容器id
复制代码
(2)进入容器查看MySQL服务
进入容器,并通过账号root查看MySQL服务能否正常连接。
  1. [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it c703b5b1911f /bin/bash
  2. [root@c703b5b1911f /]# ls
  3. bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
  4. [root@c703b5b1911f /]# ps -ef      
  5. UID        PID  PPID  C STIME TTY          TIME CMD
  6. root         1     0  0 03:31 ?        00:00:00 /bin/sh -c while true;do echo hi;sleep 5;done
  7. root       279     0  0 03:54 pts/0    00:00:00 /bin/bash
  8. root       315     1  0 03:56 ?        00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 5
  9. root       316   279  0 03:56 pts/0    00:00:00 ps -ef
复制代码

   Docker系列文章:
1.Docker快速入门总结笔记
2.Docker容器数据卷详解
3.Dockerfile详解与镜像发布
4.Docker网络详解与实战
笔记总结:https://www.bilibili.com/video/BV1og4y1q7M4

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

自由的羽毛

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表