一、什么是Docker
在学习docker时,在网上看到一篇博文讲得很好,自己总结一下就是,Docker 将应用程序与该程序的依赖,打包在一个文件里面,改文件包括了所有打包得应用程序的所有依赖,像数据库等;直接运行改文件,就可以让程序跑起来,从而不用再去考虑环境问题。
1.虚拟机和linux容器
说到Docker就必须了解虚拟机和Linux容器,虚拟机可以实现在一种操作系统里面运行另一种操作系统,比如在 Windows 系统里面运行 Linux 系统等,而且不会对实际的电脑产生影响,不想用时将虚拟机相关文件删掉即可,用户可以通过虚拟机还原软件的原始环境,实际上就是解决了配置环境的问题。尽管它有资源占用多,启动慢等缺点。
Linux容器是为了解决虚拟机的确缺点而生的,Linux 发展出了另一种虚拟化技术:Linux 容器(Linux Containers,缩写为 LXC)。Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。由于容器是进程级别的,相比虚拟机有很多优势。像启动快、资源占用少等。
而Docker 就是属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。就像一开始说的,Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。
二、Docker用途
这里引用网上某博主的部分内容,Docker 的主要用途,目前有三大类。
(1)提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
(2)提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
(3)组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。
三、Docker安装
说明:由于Docker需要Linux内核的支持,所以本人在自己的电脑(window10)安装了VMware虚拟机,在虚拟机里面安装了一个ubuntu系统,在这基础上进行Docker的安装,安装参考了菜鸟教程,链接:https://www.runoob.com/docker/ubuntu-docker-install.html
(1)设置仓库
卸载旧版本
$ sudo apt-get remove docker docker-engine docker.io containerd runc
更新 apt 包索引
$ sudo apt-get update
安装 apt 依赖包,用于通过HTTPS来获取仓库
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
添加 Docker 的官方 GPG 密钥
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 通过搜索指纹的后8个字符,验证您现在是否拥有带有指纹的密钥。
$ sudo apt-key fingerprint 0EBFCD88
使用以下指令设置稳定版仓库
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
(2)安装 Docker Engine-Community
更新 apt 包索引
$ sudo apt-get update
安装最新版本的 Docker Engine-Community 和 containerd
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
(3)验证安装成功
输入命令:docker,出现以下命令即安装成功
四、Docker启动与停止
(1)启动docker
sudo service docker start
(2)停止docker
sudo service docker stop
(3)重启docker
sudo service docker restart
五、Docker配置
(1)将用户加入 Docker 用户组
Docker 需要用户具有 sudo 权限,为了避免每次命令都输入sudo,建议将用户加入Docker用户组
添加docker用户组
sudo groupadd docker
将当前用户加入到docker用户组
sudo gpasswd -a ${USER} docker
重启docker服务
sudo service docker restart
退出当前用户重登一下
(2)配置daemon.json
本人一开始安装完Docker后,启动docker服务,直接拉取 image文件(注意:不是图片,后面有讲到image文件)后直接报错,显示超时,因为默认网址是国外的,需要配置国内镜像
进入root权限
su root
进入docker文件
查看改文件下只有一个key.json,新建一个daemon.json文件
查看文件夹命令:ls
新建文件夹命令:vim daemon.json
编辑docker.json文件
输入以下内容:{ "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"] }
保存退出,重启docker服务
六、image 文件
Docker 把应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。
简单理解就是,将程序打包在image文件(也叫image仓库)里面,运行image文件,生成一个容器生例,容器里面跑程序(已将mysql之类的依赖都打包在里面了,不用去配置数据库等环境)
也就是说,别人的程序打包在image里面,自己直接拿过来后不用配置环境就可以直接跑(很神奇)
# 列出本机的所有 image 文件。
$ docker image ls
# 删除 image 文件
$ docker image rm [imageName]
hello-world是自己手动下载的image仓库
七、安装Hello-world实例
命令行直接输入
命令:docker image pull library/hello-world
命令解析:
docker image pull:抓取 image 文件
library:image 文件所在的组
hello-world:image 文件的名字
注意:后期需要的image文件都可以通过这样的方式拉取,像mysql数据库,ubuntu系统等
其中Docker 官方提供的 image 文件,都默认放在library组里面,因此,上面的命令可以写成下面这样。
docker image pull hello-world
运行该实例
命令:docker container run hello-world
命令解析:
docker container run:自动抓取 image 文件
注意:如果发现本地没有指定的 image 文件,就会从仓库自动抓取
运行结果
注意:输出这段提示以后,hello world就会停止运行,容器自动终止。对于那些不会自动终止的容器,必须使用docker container kill 命令手动终止。
$ docker container kill [containID]
八、容器文件
image 文件生成的容器实例,本身也是一个文件,称为容器文件。也就是说,一旦容器生成,就会同时存在两个文件: image 文件和容器文件。而且关闭容器并不会删除容器文件,只是容器停止运行而已。
# 列出本机正在运行的容器
$ docker container ls
# 列出本机所有容器,包括终止运行的容器
$ docker container ls --all
上面命令的输出结果之中,包括容器的 ID。很多地方都需要提供这个 ID,比如上一节终止容器运行的docker container kill命令。
终止运行的容器文件,依然会占据硬盘空间,可以使用docker container rm命令删除。
$ docker container rm [containerID]
运行上面的命令之后,再使用docker container ls --all命令,就会发现被删除的容器文件已经消失了。
九、配置阿里镜像
这个是额外补充的,当前面配置了各种加速镜像都没有的情况下,用这个方式
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
命令:vi /etc/docker/daemon.json
注意:daemon.json该文件可能不存在,这个时候正常创建即可
加入如下内容:
{
"registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}
例如:
配置完重启服务即可
命令1:sudo systemctl daemon-reload
命令2:sudo systemctl restart docker
十一、docker的另一种安装方式
1. 下载docker-ce的repo
curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
2. 安装依赖
yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm
3. 安装docker-ce
dnf -y install docker-ce docker-ce-cli --nobest
4.启动 docker
systemctl start docker
5.查看 docker 版本信息
docker -v
6.设置开机自动启动
systemctl enable --now docker
本人用centos 8亲测可以,就是有一个安装102M的过程有点久,只有不到100k/s的速率,不过也是可以安装成功的
至此,Docker基本入门结束,该博文参考了网上大多Docker教程