最近几天在看Devops以及进行开源工具的使用,如:puppet和ansible之类的。东西入门比较容易,基本一天一门知识,但是深入就不太容易了。毕竟我只是知识的搬运工_!!
在实验过程中,无意中想起了Docker。以前只是知道这个东西,然后就尝试试验下。结果感觉很爽!下面准备把我对docker的实验和心得分享下。
Docker的好处
Docker可以看做是非常轻量级的虚拟化工具。Vmware大家都不陌生,也安装了不少,但是在启动和安装的时候,毕竟还是相对比较消耗资源的。比如我自己的机器,16G内存,2g+256ssd,i7,也只能一次开3个虚机(vmware),资源已经耗费的很厉害了。但是有了这个docker,很是爽啊!!可以开好几个。下面把我理解的docker优点说下,至于缺点,后面我用的时候再说吧。
优点:
- 可以统一整个开发、测试和部署的环境和流程,极大地减少运维成本。
- Docker在磁盘占用、性能和效率方面相较于传统的虚拟化都有非常明显的提高。
- 镜像的使用中,新增的镜像层和下层的镜像一起又可以作为基础镜像被更上层的镜像使用。这种特性可以极大地提高磁盘利用率,所以当你的系统上有10个大小为1GB的镜像时,它们总共占用的空间大小可能只有5GB,并可极大地减少内存占用等方面。
- 作为容器概念:开发及运维人员在转移和部署应用的时候,不用关心容器里装了什么软件,也不用了解它们是如何配置的。Docker引擎同样不关心容器里的内容,它只要像码头工人一样这个容器运行起来就可以了,就像所有其他容器那样。
Docker常用命令及安装
- 环境:vmware 10;
- 系统:CentOS Linux release 7.6.1810 (Core) ,分配了3G内存,硬盘40G
Docker安装
- 安装很简单,就一条yum安装即可:yum install docker-io -y
- 安装完成后,启用docker服务:/bin/systemctl start docker.service
- 然后就是查询相关的镜像:docker search centos
[root@bogon nginx]# docker search centos
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/centos The official build of CentOS. 5500 [OK]
docker.io docker.io/ansible/centos7-ansible Ansible on Centos7 122 [OK]
docker.io docker.io/jdeathe/centos-ssh CentOS-6 6.10 x86_64 / CentOS-7 7.6.1810 x... 111 [OK]
docker.io docker.io/consol/centos-xfce-vnc Centos container with "headless" VNC sessi... 97 [OK]
...... 较多不列出了。
[OK]
- 下载镜像:docker pull centos;下载后可以用命令查询镜像;
- 查询镜像:docker images
[root@bogon ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/nginx latest e445ab08b2be 3 weeks ago 126 MB
docker.io/centos latest 9f38484d220f 5 months ago 202 MB
docker.io/ansible/centos7-ansible latest 688353a31fde 2 years ago 447 MB
docker.io/jaspeen/oracle-11g latest 0c8711fe4f0f 3 years ago 281 MB
- 之后,docker启动容器:docker run --name mycentos -it centos /bin/bash;这个地方可以直接启动,也可以加name启动(name前面是2个"-");启动后可以查看已经启动的容器;
注意:此处已经有个概念叫“容器”了,查询的时候,也能从表头看出是:“CONTAINER ID”,而不是“CONTAINER ID”。 - 查看已启动的容器:docker ps 或者 docker ps -a 查看所有启动的容器;
[root@bogon ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab5893aa2ebc e445ab08b2be "/bin/bash" About an hour ago Up About an hour 192.168.137.130:81->80/tcp nginx_03
c055e249d09d centos "/bin/bash" 23 hours ago Up 3 hours mycentos
- 进入容器:docker exec -it docker-id /bin/bash
- 启动已停止容器: docker start docker-id
- 关闭容器: docker stop docker-id
- 删除容器:docker rm docker-id
Docker第1个镜像Centos
上面列出我的第一个Centos镜像以及容器,但是找不到ip,可以进入容器之后,yum安装net-tools:yum -y install initscripts net-tools;之后就可以在容器中用ifconfig查询容器的IP了。当然也可以在外层宿主机用ifconfig查询容器的ip;
Docker第2个Nginx实验
之后,又下载了个nginx镜像,该镜像的启动如下:
docker run --name nginx_03 -it -d -p 192.168.137.130:81:80 e445ab08b2be /bin/bash
上面是
- nginx_03是docker容器的自定义名称;
- 192.168.137.130是我的虚机ip,后面的81:80是虚机端口映射docker容器的80端口
- e445ab08b2be是docker的nginx镜像id
执行命令后,查询如下:
[root@bogon ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab5893aa2ebc e445ab08b2be "/bin/bash" About an hour ago Up About an hour 192.168.137.130:81->80/tcp nginx_03
c055e249d09d centos "/bin/bash" 23 hours ago Up 3 hours mycentos
从自己机器上和vmware的centos虚机上并不能访问nginx,被拒绝
[root@bogon nginx]# curl http://192.168.137.130:81
curl: (7) Failed connect to 192.168.137.130:81; 拒绝连接
然后需要进入nginx容器启动nginx即可。
[root@bogon ~]# docker exec -it nginx_03 /bin/bash
root@ab5893aa2ebc:/#
root@ab5893aa2ebc:/#
root@ab5893aa2ebc:/# nginx
再次尝试浏览器访问nginx,虚机访问成功,虚机外的浏览器主机访问也成功!
[root@bogon nginx]# curl http://192.168.137.130:81
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>