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.1511
MAINTAINER weijs
COPY jdk8 jdk8
#ADD websocket.jar app.jar
ENV JAVA_HOME=/jdk1.7.0_79
ENV PATH=$JAVA_HOME/bin:$PATH
ENV 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]# ls
hello-world2
##通过浏览器访问会返回JSON数据
  附录:
Docker 映像是不可更改的只读层。Docker 使用 Union File System 在只读文件系统上增加可读写的文件系统,但所有更改都发生在最顶层的可写层,而其下的只读映像上的原始文件仍然不会改变。由于映像不会改变,也就没有状态。基本映像是没有父类的那些映像。Docker 基本映像主要的好处是它允许我们有一个独立运行的 Linux 操作系统。
原文地址:https://www.cnblogs.com/weijs/p/8571671.html