想实践一下Docker,手头是个windows电脑,由于想在linux下实践,所以第一步是装虚拟机,我用的是VMware Workstation 12 Player,虚拟机文件用的是ubuntu-16.04-desktop-amd64,装好ubuntu之后,如果想在windows和ubuntu之间方便的传递文件,可以在虚拟机设置中添加共享文件夹,步骤如下图:
这样设置后记得还要安装VMWare Tools,具体的做法是在vm菜单中选择“管理”->安装VMWare Tools,再进入ubuntu,在光驱中找到对应的tar.gz文件,复制到一个新建的目录下解压开,执行解压后的目录中的vmware-install.pl,安装成功后重启ubuntu,在/mnt/hgfs目录下就会发现添加的共享文件夹了。
以上的基本工作完成后,可以开始安装Docker了,在ubuntu中打开控制台,先执行一次update更新:
sudo apt-get update
复制
执行以下命令安装Docker:
sodu curl -sSL https://get.daocloud.io/docker | sh
复制
安装成功的信息如下:
执行docker -v,输出如下:
Docker version 17.03.0-ce, build 60ccb22
由于是自己实践,非生产环境,建议用root身份来操作,否则要输入sudo前缀挺麻烦;
用命令sudo passwd root重新设置root的密码;
设置完毕后执行"su -"再输入root密码,切换到root用户身份;
执行docker images,看看本地已有的docker镜像:
空空如也!
接下来我们安装和运行一个nginx服务,来初探docker的镜像和容器:
下载镜像:
docker pull daocloud.io/library/nginx
复制
下载完毕后,执行docker images可以看到下载结果:
复制
启动:
执行启动的命令是
docker run --name nginx001 -idt -P -v /mnt/hgfs/common_dir:/usr/Downloads daocloud.io/library/nginx
复制
下面来解释一下这一行命令:
run 根据指定的镜像文件启动一个容器
--name nginx001 启动后这个容器的名字
-d: 后台运行,并返回ID
-i: 互模式运行容器
-t: 为容器分配一个伪输入终端
-P: 随机映射一个端口至容器内部开放的网络端口
-v /mnt/hgfs/common_dir:/usr/Downloads:指定共享文件目录,进入容器后,容器的/usr/Downloads实际上就是ubuntu的/mnt/hgfs/common_dir目录了,这样传文件方便
daocloud.io/library/nginx:镜像文件名称,就是刚才下载的那个
复制
执行docker ps可以看到已经启动的容器:
容器已经启动了,赶紧在ubuntu下打开浏览器,再输入localhost试试吧,咦?访问失败了,unable to connect!
执行docker ps命令,可以看到这么一段信息:0.0.0.0:32769->80/tcp,这里的意思是docker容器的80端口映射到的是ubuntu的32769端口,那么我们在unbuntu的浏览器中只要访问localhost:32769,就能访问到docker容器80端口了,试试吧,果然熟悉的welcome页面终于出现了:
接下来进入容器去看看,执行命令
docker exec -it nginx001 /bin/bash
复制
下面来解释一下这一行命令:
exec 进入容器
--name nginx001 启动后这个容器的名字
nginx001: 容器名字,也可以是id
/bin/bash: 进入容器后执行的命令
复制
现在我们已经进入容器了,执行命令cat /etc/issue看看系统情况
原来这个容器的镜像是Debian系统的,接下来我们尝试修改nginx的配置,改之前先回顾一下共享文件路径,我们从windows到vm的ubuntu,再从ubuntu到docker容器,都设置过共享文件路径的,依次是:
E:\work\vm_share\common_dir -> /mnt/hgfs/u16 -> /usr/Downloads
也就是说三个系统下面,各自的目录其实是同一个目录,在docker容器中执行cp /etc/nginx/nginx.conf ./,回到windows的E:\work\vm_share\common_dir目录下就会发现nginx.conf文件。
在windows下打开nginx.conf这个文件,找到这一行include /etc/nginx/conf.d/*.conf;,在这一行前面加个“#”注释掉这一行配置,然后在这一行下面增加如下语句:
server {
server_name localhost;
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
location / {
root html;
index welcome.html;
}
}
复制
这个配置是增加一个目录用来响应http请求,并改写默认index页面以及文件目录的路径,写完并保存后,回到docker容器,执行cp /usr/Downloads/nginx.conf /etc/nginx/,用改好的文件覆盖docker容器中的nginx配置文件;
在docker容器的/etc/nginx/目录下新建一个html目录,进入该目录后执行echo “abcdef” > welcome.html,这样就新建了一个内容为abcdef的html文件;
执行命令service nginx reload来重新加载nginx的配置信息,这时候再去ubuntu的浏览器上重新打开localhost:32769,可以看到默认页面已经改变了:
以上就是初步体验docker的过程,如果想关闭容器,可以执行docker stop nginx001命令来停止,想再次启动该容器,可以执行docker start nginx001。
到此,Docker的准备,安装和初体验就结束了,后续我将结合通常的java开发和部署工作,在Docker上做更多的尝试,第一次写博客,如果大家发现其中的错误的漏洞,欢迎您的指正,期待在探讨中共同进步。