Docker是什么
Docker 是一个基于Go语言实现的开源的容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上
Docker网站
官网:Docker: Accelerated, Containerized Application Development
中文网站:docker中文社区,docker帮助,docker手册,docker教程,docker安装手册 - docker中文社区
Docker概念
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)。
打包:把服务运行所需的依赖、第三方库、打包成一个安装包。
分发:把你打包好的安装包上传到一个镜像仓库,其他人可以很方便的安装部署。
部署:使用分发下来的安装包,一条命令就可以运行起来,自动模拟出一模一样的运行环境,不管是在 Windows/Mac/Linux。
Docker的应用场景
1. Web 应用的自动化打包和发布。
2. 自动化测试和持续集成、发布。
3. 在服务型环境中部署和调整数据库或其他的后台应用。
4. 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
Docker 的优点
Docker 是一个用于开发,交付和运行应用程序的开放平台。
Docker 能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,可以与管理应用程序相同的方式来管理基础架构。
通过利用 Docker 的方法来快速交付,测试和部署代码,大大减少编写代码和在生产环境中运行代码之间的延迟。
1、快速,一致地交付您的应用程序
Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:
您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。
2、响应式部署和扩展 Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。
3、在同一硬件上运行更多工作负载 Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。
Docker 安装
适用版本
Docker 支持以下的 64 位 CentOS 版本:
CentOS 7
CentOS 8
安装方法
一、官方脚本安装
两种安装方法任选其一即可。安装命令如下:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
国内 daocloud 一键安装命令:
curl -sSL https://get.daocloud.io/docker | sh
二、手动安装
(1)卸载旧版本 较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。
[root@doc ~]# yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
(2)安装 Docker Engine-Community
安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
[root@doc ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
1. 安装源
使用官方源地址,因为官方源比较慢,所以这里使用了【阿里源】
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
可以选择国内的一些源地址:
阿里云
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
清华大学源
yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
2. 安装 Docker Engine-Community
安装最新版本的 Docker Engine-Community 和 containerd,或者转到下一步安装特定版本。
yum -y install docker-ce docker-ce-cli containerd.io
(1)默认yum安装docker最新版本,如果希望选择某个旧版本安装,请在安装时写上相应的版本号。
(2)Docker 安装完默认未启动。并且已经创建好 docker 用户组,但该用户组下没有用户。
(3)要安装特定版本的 Docker Engine-Community,请在存储库中列出可用版本,然后选择并安装。
3. 查找版本并安装
(1)列出并排序您存储库中可用的版本。此示例按版本号(从高到低)对结果进行排序。
1. [root@doc ~]# yum list docker-ce --showduplicates | sort -r 2. 已加载插件:fastestmirror, langpacks 3. 已安装的软件包 4. 可安装的软件包 5. * updates: mirrors.aliyun.com 6. Loading mirror speeds from cached hostfile 7. * extras: mirrors.aliyun.com 8. docker-ce.x86_64 3:23.0.1-1.el7 docker-ce-stable 9. docker-ce.x86_64 3:23.0.1-1.el7 @docker-ce-stable 10. docker-ce.x86_64 3:23.0.0-1.el7 docker-ce-stable 11. #省略部分内容
(2)通过其完整的软件包名称安装特定版本,该软件包名称是软件包名称(docker-ce)加上版本字符串(第二列),从第一个冒号(:)一直到第一个连字符,并用连字符(-)分隔。例如:docker-ce-23.0.1。
yum -y install docker-ce-23.0.1 docker-ce-cli-23.0.1 containerd.io
4. 启动 Docker
[root@doc ~]# systemctl start docker
通过运行 hello-world 映像来验证是否正确安装了 Docker Engine-Community ,也可以查看版本号。
1. [root@doc ~]# docker run hello-world 2. [root@doc ~]# docker -v 3. Docker version 23.0.1, build a5ee5b1
5. 卸载 docker 删除安装包(这一步知道就好,不要操作,否则因为下面的内容需要重新安装docker)
[root@doc ~]# yum -y remove docker-ce
删除镜像、容器、配置文件等内容:
[root@doc ~]# rm -rf /var/lib/docker
Docker的基本概念
镜像image: 容器运行的基石,一个镜像代表一个软件,只读;
容器container: 基于某个镜像运行一次之后生成的程序实例,也称为一个容器,可读写;
仓库repository: 指的是放置image(镜像)的地方,默认指定的是docker官方的仓库:dockerhub仓库地址:Docker
配置Docker镜像加速器
dockerhub是在国外,我们在下载镜像的时候,速度非常慢,且经常会出现timeout的情况,因此,我们这里决定配置一个加速器,能够帮组我们快速的下载镜像,常用的加速器有很多,这里我们说两个。
1.阿里云镜像加速器
除了上述方法,还可以使用阿里云镜像加速器,当然,前提需要每个人都申请注册一个阿里云账号。注册成功后,在阿里云官网上,找到容器镜像服务。
1. sudo mkdir -p /etc/docker 2. sudo tee /etc/docker/daemon.json <<-'EOF' 3. { 4. "registry-mirrors": ["https://a5jmai7s.mirror.aliyuncs.com"] 5. } 6. EOF 7. sudo systemctl daemon-reload 8. sudo systemctl restart docker
2.道云加速器
道云官方下载地址:DaoCloud | Docker 极速下载
执行下面命令在/etc/目录下,创建一个docker的目录,且在此目录下生产2个文件:一个是daemon.json ,key.json。
1. [root@doc ~]# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io 2. [root@doc ~]# systemctl daemon-reload 3. [root@doc ~]# systemctl restart docker 4. [root@doc ~]# docker info #查看docker系统信息 5. #省略部分内容
Docker使用
1. [root@doc ~]# docker pull nginx #下载nginx镜像 2. #省略部分内容 3. [root@doc ~]# docker pull mysql:5.7 #下载mysql镜像 4. #省略部分内容 5. [root@doc ~]# docker images #查看本地镜像 6. REPOSITORY TAG IMAGE ID CREATED SIZE 7. mysql 5.7 0018a8d83892 4 days ago 455MB 8. nginx latest 904b8cb13b93 11 days ago 142MB 9. hello-world latest feb5d9fea6a5 17 months ago 13.3kB
( 或复制镜像文件到虚拟机:docker load -i 镜像文件)
1、使用docker部署nginx服务。
1. [root@doc ~]# docker run -itd --name web1 -p 8080:80 nginx #部署web1 2. b73d7a86a5bb27e0f1af1e5e5574319523cce923fac9ac03d7258cbae761e6b0 3. [root@doc ~]# docker run -itd --name web2 -p 8081:80 nginx #部署web2 4. 60439081eebcb12bc6b56614b685dde8e0e28194910eca597e3835f39ba0af0f 5. [root@doc ~]# docker run -itd --name web3 -p 8082:80 nginx #部署web3 6. 0ba96531f6b36a5326bf949ecd8a7316a163f5c0207258f42c8685a50f4bfd40
交互式进入容器
1. [root@doc ~]# docker exec -it web1 /bin/bash 2. root@b73d7a86a5bb:/# ls 3. bin docker-entrypoint.d home media proc sbin tmp 4. boot docker-entrypoint.sh lib mnt root srv usr 5. dev etc lib64 opt run sys var 6. root@b73d7a86a5bb:/# exit #退出 7. exit
2、使用docker部署MySQL服务。
1. [root@doc ~]# docker run -d --name test_sql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123 mysql:5.7 #部署mysql 2. 3805d896e81790865ddb02e64a4510c3569b9b41302ba5a3cadb9b853e153884
1. 查看镜像
[root@doc ~]# docker images
2. 查看容器
[root@doc ~]# docker ps -a
3. 导入本地镜像文件
[root@doc ~]# docker load -i mysql5.7.tar
例:使用save打包mysql镜像,删除docker中的mysql镜像并再次导入打包后的镜像
1. [root@doc ~]# ls 2. anaconda-ks.cfg initial-setup-ks.cfg perl5 3. [root@doc ~]# docker images #查看镜像 4. REPOSITORY TAG IMAGE ID CREATED SIZE 5. mysql 5.7 0018a8d83892 4 days ago 455MB 6. nginx latest 904b8cb13b93 11 days ago 142MB 7. hello-world latest feb5d9fea6a5 17 months ago 13.3kB 8. [root@doc ~]# docker save -o mysql-1.0.tar mysql:5.7 #打包到本地root下 9. [root@doc ~]# ls 10. anaconda-ks.cfg initial-setup-ks.cfg mysql-1.0.tar perl5 11. [root@doc ~]# docker rmi -f 0018a8d83892 #强制删除mysql(后面数字为镜像id) 12. Untagged: mysql:5.7 13. Untagged: mysql@sha256:9202fc6bc8fa63615e6bfc0049fc660f712d164220c5c54d86519870c305ea48 14. Deleted: sha256:0018a8d838923d94318aa8dd3195510226b31540901a6f4c643aacec69f7ab62 15. [root@doc ~]# docker images #再次查看镜像已经删除mysql镜像 16. REPOSITORY TAG IMAGE ID CREATED SIZE 17. nginx latest 904b8cb13b93 11 days ago 142MB 18. hello-world latest feb5d9fea6a5 17 months ago 13.3kB 19. [root@doc ~]# docker load -i mysql-1.0.tar #上传镜像 20. Loaded image: mysql:5.7 21. [root@doc ~]# docker images #查看docker镜像已经上传 22. REPOSITORY TAG IMAGE ID CREATED SIZE 23. mysql 5.7 0018a8d83892 4 days ago 455MB 24. nginx latest 904b8cb13b93 11 days ago 142MB 25. hello-world latest feb5d9fea6a5 17 months ago 13.3kB
总结:本篇主要讲的是安装以及加速等,本篇很适合小白从头学起。后续会持续更新,下一篇将根据docker的基础命令讲解,我们从无到有。对docker有兴趣的小伙伴可以点个关注,一起学习、进步。