Docker入门学习记录
重要概念:
Docker 基本映像主要的好处是它允许我们有一个独立运行的 Linux 操作系统容器镜像仓库
一、安装Docker
1. 安装社区版,安装文档:
https://docs.docker.com/install/linux/docker-ce/centos/
#查看是否已安装
# sudo yum list installed | grep docker
二、简单使用
参考“一小时Docker教程”:https://blog.csphere.cn/archives/22
在默认情况下,Docker镜像和容器的默认存放位置为:/var/lib/docker
[root@localhost sysconfig]# find / -name docker/run/docker/etc/docker/var/lib/docker/usr/share/bash-completion/completions/docker
镜像信息:
/var/lib/docker/image/devicemapper/repositories.json
容器信息:
/var/lib/docker/containers
三、官方文档
四、中文文档
五、使用国内镜像仓库
网易云:# docker pull hub.c.163.com/library/centos:centos7.2.1511
六、搭建一个JAVA环境的CentOS7镜像
1. 从网易云拉一下centos镜像
2. 创建容器
//注意,未映射端口//启动容器命令 docker run options containsID argument#options参数说明#-d选项,告诉Docker以分离(detached)的方式在后台运行,这种方式非常适合运行类似Nginx守护进程这样的需要长时间运行的进程。#-i:表示以“交互模式”运行容器#-t:表示容器启动后会进入其命令行#-v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>#--name: 指定容器的名称,如果未指定容器名称则会随机生成一个名称#feac5e0dfdb2为镜像ID#/bin/bash为创建容器后执行的命令# docker run --name centosJavaTest -itv /opt/:/mnt/software/ feac5e0dfdb2 /bin/bash
3. 退出重新登录容器
#退出# exit#启动容器# docker start centosJavaTest#登录容器# docker attach centosJavaTest
4. 查看容器IP
//不退出的话需要新开一个xshell客户端# docker inspect centosJavaTest | grep IPAddress# docker inspect 10ed4b5ec278 | grep IPAddress或者在容器中安装net-tools,然后使用ifconfig查看
5. 为容器映射端口
5.1 iptable转发端口(感觉不好,对系统有侵入)
将容器的8000端口映射到docker主机的8001端口# iptables -t nat -A DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000
5.2. 提交一个运行中的容器为镜像
# docker commit 10ed4b5ec278 centos/xwiki
运行镜像并添加端口
# docker run --name centosXwiki -itv /opt/:/mnt/software/ -p 8082:8082 d58f36f23c14 /bin/bash
注意:镜像启动时挂载的卷,在提交为镜像时,不会包含在内
6. 在容器中启动xwiki并从远程访问
6.1 配置jdk,与宿主计算机配置方法一致,但是要注意,重启容器后,需要重新 # source /etc/profile
6.2 启动xwiki,然后远程访问:http://192.168.1.121:8082
7. 使用dockerfile构建一个镜像
参考文档:
#以网易云centos7.2构建一个支持jdk8的镜像
Dockfile:FROM hub.c.163.com/library/centos:centos7.2.1511MAINTAINER weijsCOPY jdk8 jdk8#ADD websocket.jar app.jarENV JAVA_HOME=/jdk1.7.0_79ENV PATH=$JAVA_HOME/bin:$PATHENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 注意,仓库名必须小写,后面还有一个“.”
# docker build -t weijs/centosjava .
8. 搭建本地私有仓库,并上传镜像
创建本地Docker仓库
# 从网易云拉取仓库镜像# docker pull hub.c.163.com/library/registry:latest## 搭建本地镜像源(指定目录)# docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name localRegistry hub.c.163.com/library/registry:latest## 使用新的Registry给该镜像打上标签# docker tag f2a91732366c 127.0.0.1:5000/test/hello-world2## 通过docker push 命令将它推送到新的Registry中去# docker push 127.0.0.1:5000/test/hello-world2## 传到本地远程仓库(183),默认是走HTTPS协议,需要先修改镜像所在宿主机的docker配置##注意,修改启动命令的方式不成功,使用添加新配置文件的方式解决,此方案不能与在启动命令中添加配置的方案共存,需要先还原启动命令# vi /usr/lib/systemd/system/docker.service# ExecStart=/usr/bin/dockerd --insecure-registry 192.168.0.183:5000
## 在/etc/docker/下新建daemon.json,添加{ "insecure-registries":["192.168.1.183:5000"] }
重启docker:
# systemctl daemon-reload# systemctl restart docker## 使用新的Registry给该镜像打上标签# docker tag f2a91732366c 192.168.1.183:5000/test/hello-world2## 通过docker push 命令将它推送到新的Registry中去# docker push 192.168.1.183:5000/test/hello-world2[root@localhost docker]# curl -XGET http://192.168.1.183:5000/v2/_catalog{"repositories":["test/hello-world2"]}
## 如果远程镜像与本地镜像一致,则不会更新,类似GIT# docker pull 192.168.1.183:5000/test/hello-world2##查看新的仓库[root@localhost test]# pwd/opt/registry/docker/registry/v2/repositories/test[root@localhost test]# lshello-world2
##通过浏览器访问会返回JSON数据
附录:
Docker 映像是不可更改的只读层。Docker 使用 Union File System 在只读文件系统上增加可读写的文件系统,但所有更改都发生在最顶层的可写层,而其下的只读映像上的原始文件仍然不会改变。由于映像不会改变,也就没有状态。基本映像是没有父类的那些映像。Docker 基本映像主要的好处是它允许我们有一个独立运行的 Linux 操作系统。