虚拟机是运行于操作系统之上的系统,通常通过虚拟机管理程序对主机资源进行访问,会消耗大量的资源。
docker 则在Linux本地运行,与其他容器一起共享主机资源,不会占用其他程序的资源,从而显得更加轻巧。
Docker 的组件
镜像images:可以理解为一个完整的操作系统,里面部署了你想要的应用代码。
容器 containers:依据镜像创建的实例,可以启动、停止、开始、删除,镜像里面的基础代码,容器可以配置个性化代码(例如各种配置文件、日志文件等等)
-
仓库 registry:这个跟maven的远程仓库一样,保存了很多镜像。市场上有很多公用的仓库,DockerHub是官方,但是在国内访问很慢,也有阿里、网易等多家互联网公司提供镜像仓库。
当然,你可以根据需要,自己在本地网络新建一个仓库。
客户端 dockerclient:理解为你的开发机器,但是你需要安装一个dockerclient,可以是IDEA的docker插件。
服务器 dockerserver :理解为你需要部署的服务器,需要安装Docker Engine-Community
Docker的在CentOs下安装
Docker支持以下64位的操作系统
- CentOS 7
- CentOS 8
- 更高版本...
- 卸载旧版本
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
- 安装初始化依赖
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
- 设置安装仓库
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
- 安装Docker Engine-Community
$ sudo yum install docker-ce docker-ce-cli containerd.io
- 启动Docker,并设置为开机启动
$ sudo systemctl start docker
$ sudo systemctl enable docker
- 验证安装是否成功
$ sudo docker run hello-world
启动以后,如果安装成功会输出:
Hello from Docker!
This message shows that your installation appears to be working correctly.
.......
Docker 安装、启动、更新常用命令
sudo systemctl daemon-reload #刷新/etc/docker/daemon.json文件
sudo systemctl enable docker-tcp.socket #刷新/etc/systemd/system/docker-tcp.socket文件
sudo systemctl stop docker #停止docker服务
sudo systemctl start docker-tcp.socket #启用docker-tcp服务,这个用于非本机客户端访问docker
sudo systemctl start docker #启动docker服务
sudo systemctl restart docker #重启docker服务
Docker 下载镜像、设置镜像加速
-
设置镜像加速
a) 设置了镜像加速器以后,如果一个镜像拉取不到,则会切换到加速器的地址。
- Docker 官方提供的中国 registry mirror
https://registry.docker-cn.com
- 七牛云加速器
https://reg-mirror.qiniu.com/
- 阿里云加速器 需要登录容器Hub服务的控制台 ,使用阿里云的账户密码才能取到。
b) 对于Ubuntu 16.04+、Debian 8+、CentOS 7系统,先建立一个 /etc/docker/daemon.json ,在文件中写入如下内容。
- Docker 官方提供的中国 registry mirror
{
"registry-mirrors": [
"https://registry.docker-cn.com"
]
}
c) 之后重新启动服务。
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
-
镜像的下载
使用pull命令下载镜像,如果没有版本号,则默认最新版本。
docker pull nginx
Docker 镜像操作的基本命令
查询镜像
docker search nginx
获取一个镜像
docker pull nginx
列出本机镜像列表
docker images
删除本机镜像
docker rmi hello-world
更新本机镜像,这个需要先启动一个容器,在容器里面更新
docker run -t -i nginx /bin/bash
#进入容器以后执行更新命令
docker commit -m="has update" -a="runoob" e218edb10161 runoob/nginx:v2
创建自己的镜像
这个多种方式,可以依据另外一个现有的镜像克隆一个镜像。也可以使用 docker build 依据 Dockerfile 文件 创建对象,创建的文件内容如下
FROM centos:6.7
MAINTAINER Fisher "fisher@sudops.com"
RUN /bin/echo 'root:123456' |chpasswd
RUN useradd runoob
RUN /bin/echo 'runoob:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D
通过docker build命令创建
docker build -t runoob/centos:6.7
最后通过 docker images命令查询名字为runoob/centos:6.7的镜像
docker images
Docker 容器的使用
列举常用的操作
- 启动
docker run -it ubuntu /bin/bash
参数说明:
- -i: 交互式操作。
- -t: 终端。
- -d:后台运行
- ubuntu: ubuntu 镜像。
- /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
要退出终端,直接输入 exit:
- 查看所有停止容器或运行容器
docker ps -a #查看所有
docker ps #查看启动
- 停止一个容器
docker stop <容器 ID> #<容器 ID>,例如1e560fca3906,不需要<>
- 重启一个容器
docker restart <容器 ID>
-
容器也是一个操作系统,所以,可以进入容器
docker attach
docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。
docker attach <容器 ID> #退出会导致容器停止
docker exec -it <容器 ID> /bin/bash
- 导入和导出容器
docker export <容器 ID> > ubuntu.tar
以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:
cat docker/ubuntu.tar | docker import - test/ubuntu:v1
指定某个URL导入
docker import http://example.com/exampleimage.tgz example/imagerepo
- 删除容器
docker rm -f <容器 ID>
-f:强制删除