docker是一个虚拟机,主要应用在Linux和后台一些应用的虚拟机,和常见的VM有很多相似的地方。
镜像:
需要下载的系统文件iso…
容器:
正在运行中的一个虚拟机
docker中多了一些tar文件,可以通过指令重新加载成一个镜像。
dockerfile通过写如何构建的步骤,可以将dockerfile构建成镜像。
仓库保存了很多镜像,以及第三方镜像,可以通过docker pull下载镜像/push指令上传。
此处我用到的是centos7,使用yum源安装。
可以根据开发者社区Docker CE镜像文档配置。
链接: https://developer.aliyun.com/mirror/docker-ce?spm=a2c6h.13651102.0.0.3e221b11rH6ppU
以下是根据文档配置过程,可忽略。
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
sudo yum makecache fast
sudo yum -y install docker-ce
sudo service docker start
vim /etc/yum.repos.d/docker-ce.repo
yum list docker-ce.x86_64 --showduplicates | sort -r
sudo yum -y install docker-ce-版本号
docker version
systemctl status docker
从远程仓库上面pull下载,此处列举nginx
[root@bogon ~]# docker pull nginx
docker pull nginx等于docker pull nginx:latest
不指定版本,默认就是最新版本。
此时nginx镜像就已经下载下来了。
docker images
通过run指令将nginx镜像运行成一个正在运行的容器(虚拟机)。
在docker的使用中常用docker run指令跑镜像,比较重要的参数:
-d后台运行
-p映射内外端口,先写外部端口再写内部端口
–name容器运行起来后的名字
-v映射文件
[root@bogon ~]# docker run -d -p 80:80 nginx
此时d4…这一串是运行的容器id。
[root@bogon ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d42f5d21d47d nginx "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp pensive_mcclintock
我的虚拟机ip地址是:192.168.18.132
端口号是80
浏览器访问:
192.168.18.132:80
我们会发现已经运行起来nginx,说明外部端口映射里面的80,同时也可以启动多个。
总结:通过pull和run将nginx容器运行起来,例如想对nginx进行修改,可以通过docker exec -it 容器id。
[root@bogon ~]# docker exec -it d4 bash
root@d42f5d21d47d:/#
index文件放在/usr/share/nginx/html中
直接修改index文件:
root@d42f5d21d47d:/usr/share/nginx/html# echo hello > index.html
root@d42f5d21d47d:/usr/share/nginx/html# cat index.html
hello
80端口会显示:
退出d4容器
root@d42f5d21d47d:/usr/share/nginx/html# exit
通过docker rm -f强制删除81端口。
通过docker commit指令指定一个镜像的名字,比如说z1。
[root@bogon ~]# docker commit d4 z1
sha256:7b9573603d62f9dcd9c68ec72ff7582d1d563651f8edcf8e69ddb6bb6dd0fe77
[root@bogon ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
z1 latest 7b9573603d62 21 seconds ago 142MB
nginx latest a7be6198544f 19 hours ago 142MB
[root@bogon ~]# docker run -d -p 90:80 z1
75e5d60e8a96fc137ea42cef1f07fc66bbc3c32bbfae1fa17370d00cd636ceb5
通过访问90端口,可以看到页面是hello,说明修改后的容器保存成镜像,重新运行,它可以保持这个变化。
通过dockerfile,新建一个dockerfile文件。
此时可以学习下dockerfile语法。
通过FROM指定docker构建的基础镜像,是基于nginx镜像,将当前目录下的所有文件拷贝到/usr/share/nginx/html文件夹下,当前我们创建了一个index.html文件,里面可以写外部的文件。
通过docker build -t z2 .指定的是当前目录下的dockerfile去构建。
通过100号端口映射z2
使用dockersave讲z2(镜像名)保存到zhang.tar文件里。
[root@bogon ~]# docker save z2 >zhang.tar
因为这个z2有个容器是基于镜像的所以无法删除,需要将这个容器也删除。
当前z2镜像已经删除,通过docker save