简介
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
开发时我们会遇到很多环境,而环境的安装是比较繁琐的。
使用docker,可以直接从网上down下一个相应镜像。从网上拉下一个mysql镜像,用一条命令运行它。
优点:
- 上手快
- 职责的逻辑分类
- 高校快速的开发生命周期
- 鼓励使用面向服务的架构(微服务)
容器与虚拟机技术的比较:
- 虚拟机运行在虚拟层(可以虚拟出各种硬件)之上。
- 容器在Docker Engine之上运行的是二进制库,库之上安装各种应用软件。通过Docker Engine,共用主机的操作系统。所以占用空间更小。运行的速度也更加快。
DockerDaemon组件:
- Docker守护进程
- DockerClient客户端
- DockerImage镜像
- DockerContainer容器
安装
step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Step 3: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
启动:
systemctl start docker
systemctl enable docker
安装补全操作:
yum install -y bash-*
我的第一个容器
查看此时有什么容器:
[root@server1 mnt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
可见,并没有任何镜像。我提前从网上下载了一个tar包,我们把它load到镜像上去
docker load -i game2048.tar
再次查看镜像
[root@server1 mnt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
game2048 latest 19299002fdbe 3 years ago 55.5MB
查看此镜像的历史信息
[root@server1 mnt]# docker history game2048:latest
IMAGE CREATED CREATED BY SIZE COMMENT
19299002fdbe 3 years ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "sed … 0B
<missing> 3 years ago /bin/sh -c #(nop) EXPOSE 80/tcp 0B
<missing> 3 years ago /bin/sh -c #(nop) COPY dir:cb74e9c037a3d501c… 600kB
<missing> 3 years ago /bin/sh -c #(nop) MAINTAINER Golfen Guo <go… 0B
<missing> 3 years ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B
<missing> 3 years ago /bin/sh -c #(nop) EXPOSE 443/tcp 80/tcp 0B
<missing> 3 years ago /bin/sh -c #(nop) COPY file:d15ceb73c6ea776c… 1.1kB
<missing> 3 years ago /bin/sh -c #(nop) COPY file:af94db45bb7e4b8f… 643B
<missing> 3 years ago /bin/sh -c GPG_KEYS=B0F4253373F8F6F510D42178… 50.1MB
<missing> 3 years ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.11.7 0B
<missing> 3 years ago /bin/sh -c #(nop) MAINTAINER NGINX Docker M… 0B
<missing> 3 years ago /bin/sh -c #(nop) ADD file:7afbc23fda8b0b387… 4.8MB
运行这个镜像
[root@server1 mnt]# docker run -d --name game1 -p 80:80 game2048
ef4bd229b35f9d07a09d2437b896b8b781567da1769ccde06dfdc8f08771fa28
game1是我们给容器起的名字,
-p参数是做端口映射,冒号前面是物理机端口,冒号后面是容器内端口。意思就是访问物理机80端口时直接映射到容器内
查看
[root@server1 mnt]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ef4bd229b35f game2048 "/bin/sh -c 'sed -i …" 5 seconds ago Up 4 seconds 0.0.0.0:80->80/tcp, 443/tcp game1
已经在运行了
我们打开浏览器访问一下: