容器的6大命名空间
docker 三大核心概念
Docker 的优点
Docker 的缺点
云平台,总的来说分为两部分:私有云(openstack),弹性云(DOCKER)
Docker一般是结合私有云openstack放在一起用,是与openstack是互补的技术。一般是在云主机里面,部署docker。
Docker应用封装,是其弹性的本质。
]# yum -y install docker
]# systemctl start docker
]# systemctl enable docker
]# docker # 直接回车查看全部命令
]# docker help search # 查看search命令的简单使用
]# man docker-search # 查看详细的
启用容器,可以理解为将镜像当成一个后端盘,以镜像为模板创建一个前端盘,运行
]# docker search contos # 在镜像仓库中搜索镜像
]# docker search nginx
]# docker search busybox
]# docker search contos
INDEX NAME DESCRIPTION STARS OFFICIAL
docker.io docker.io/centos The official build of CentOS. 5665 [OK]
# 注意:搜索出来的镜像,在OFFICIAL显示[OK]的为官方镜像,否则为非官方。
docker images # 查看镜像列表
docker history # 查看镜像制作历史(主要是看落了几层后端盘)
docker inspect # 查看镜像底层信息
docker pull # 下载镜像
docker push # 上传镜像
docker rmi # 删除本地镜像
docker save # 镜像另存为tar包
docker load # 使用tar包导入镜像
docker search # 搜索镜像
docker tag # 修改镜像名称和标签
]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos latest 76d6bc25b8a5 13 months ago 199.7 MB
‘镜像仓库/名称 镜像标签 镜像ID 创建时间 大小
]# docker pull docker.io/busybox # 下载镜像
]# docker images # 下载后即可查看到该镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/busybox latest 020584afccce 12 days ago 1.22 MB
]# docker push docker.io/busybox # 上传本地镜像到仓库
]# docker save docker.io/busybox:latest -o busybox.tar # 将已有镜像另存为tar包
]# docker load -i busybox.tar # 将tar包镜像导入
]# docker history docker.io/contos # 了解镜像的制作过程
IMAGE CREATED CREATED BY SIZE
76d6bc25b8a5 13 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
<missing> 13 months ago /bin/sh -c #(nop) LABEL org.label-schema.sch 0 B
<missing> 13 months ago /bin/sh -c #(nop) ADD file:8f4b3be0c1427b158f 199.7 MB
]# docker inspect docker.io/centos
]# docker rmi docker.io/centos
`镜像的唯一标识是:名称+标签
在表示镜像时的书写为:名称:标签 # 如:busybox:latest
‘latest:这是默认标签。‘
‘ID:就相当于名称+标签的hash值。(所以,ID也可作为标识)‘
]# docker tag 旧的 新的
]# docker tag docker.io/centos:latest cen:v1
]# docker images # 查看镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
cen v1 020584afccce 12 days ago 1.22 MB
docker run # 运行容器
docker attach | exec # 进入容器
docker rm # 删除容器
docker ps [-a|-q] # 查看正在运行的容器列表。-a所有的,-q仅显示容器id
docker top # 查看容器进程
docker inspect # 查看容器底层信息
docker start # 启动容器
docker stop # 关闭容器
docker restart # 重启容器
`run 命令包含了两个功能:create、start。即先创建,再启动。
-i # 交互式
-t # 表示终端
-it # 即启用交互式终端
-d # 在后台分离运行容器
-v /data:/data # 映射卷。<宿主机卷>:<容器卷>
-p 80:80 # 将真机端口与容器端口绑定
-p 宿主机端口:容器端口
只要有提前封装好的镜像,就可以快速发布服务。这也就是docker弹性云的本质
---------------------------------------------------------------------------------
]# docker run -it docker.io/centos:latest /bin/bash # /bin/bash是容器内的命令
]# docker run -it docker.io/centos
# 当标签是默认的latest时可省略,当不知道容器内命令时,也可不写,每个容器的镜像会有一个默认的启动命令。
]# docker run -itd docker.io/nginx
# 当启动的是一个服务时,一般默认启动命令是启动一个守护进程,无法直接交互,加-d 能放入后台,或者是选择一个容器内的其它命令进行启动容器。
`管理容器的唯一标识是ID,通过start、stop、restart 可以管理正在 运行中 的容器状态
]# docker start ID # 当容器在后台已经运行进,进入容器的命令。
]# docker stop ID
]# docker restart ID
rm 支持参数回调,即将下一条命令参数返回给 rm
用法:
]# docker rm $(docker ps -qa) # 将所有的容器ID输出作为参数,回传给 rm 命令
]# docker rm $(docker stop ID) # 当容器在运行时,无法删除,需要先停止,再删除
]# docker rm $(docker stop $(docker ps -qa) )
attach # 进入容器,exit会导致容器关闭 Ctrl+p+q退出则不关闭
exec # 进入容器,退出时不会关闭容器
]# docker attach ID # 以上帝进程进入容器(一般不采用)
]# docker exec -it ID /bin/bash # 单独启动一个进程进入容器
‘常规情况下,由于容器相当于一个进程,是隔离的,当容器运行的数量多时,查看容器中运行的进程,是无法直接在真实机上运行命令:ps -ef 进行查看容器内的进行,这时,就需要用到:docker top 命令了。
top 可以让真实机环境下查看运行中容器的进程。‘
]# docker top ID
‘格式:docker commit ID 新镜像名:标签‘
]# docker run -it docker.io/contos:latest /bin/bash # 进入容器执行一些操作(增、删)
]# docker ps
]# docker commit 8d20kdi3o docker.io/myos:latest # 创建新镜像
‘Dockerfile 语法格式
FROM # 基础镜像
MAINTAINER # 镜像创建者信息
EXPOSE # 开放的端口
ENV # 设置变量
ADD # 复制本地文件到镜像
RUN # 制作镜像时在容器里面执行的命令,可以有多个
WORKDIR # 定义容器默认工具目录
CMD # 容器启动时默认执行的命令,仅可以有一条CMD
-----------------------------------------------------------------------------------
CMD ["/bin/ls","-l","-a"] # 假如启动命令为:~]# ls -l -a。要用引号,空格用逗号代替。不能有空格
Dockerfile 案例
]# docker build -t 新镜像名:标签 Df的路径 # 通过Dockerfile创建新镜像
-----------------------------------------------------------------------------------
]# cd /root/
]# vim Dockerfile
FROM docker.io/centos:latest
RUN rm -rf /etc/yum.repos.d/*
ADD local.repo /etc/yum.repos.d/local.repo
RUN yum -y install net-tools vim psmisc bash-completion iproute
]# docker build -t myio:latest . # 点为当前目录
]# vim Dockerfile # 名称必须为Dockerfile
FROM docker.io/myos:latest
MAINTAINER shun s_linux@sina.com
RUN yum -y install httpd
ENV env
ADD /root/index.html /var/www/html/index.html # 此命令等效下面两条命令
WORKDIR /var/www/html/ # 相当于cd 到此目录下,再执行下面的命令
ADD index.html index.html # 将当前目录下的文件,拷贝到,上一条命令指定的路径
EXPOSE 80
EXPOSE 443
CMD ["http","-DFOREGROUND"]
`这是创建HTTP服务的镜像,由于镜像中一般是没有systemctl命令的,但是作为服务镜像,一般要求启动容器时默认命令是为启动服务的。所以,需要查看httpd.service这个文件中是怎么定义启动服务,然后通过该文件中的启动命令进行启动该服务。
]# rpm -ql httpd | grep httpd.service
/usr/lib/systemd/system/httpd.service
]# vim /usr/lib/systemd/system/httpd.service
EnvironmentFile=/etc/sysconfig/httpd # 参数文件
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND # 启动命令
]# yum -y install docker-distribution
]# systemctl start docker-distribution
]# systemctl enable docker-distribution
]# ss -tunpl # 端口是:5000
Netid State Recv-Q Send-Q Local Address:Port
tcp LISTEN 0 128 :::5000
‘不需要修改配置。‘
/etc/docker-distribution/registry/config.yml # 仓库配置文件
/var/lib/registry # 数据存储路径
]# vim /etc/sysconfig/docker
13 ADD_REGISTRY=‘--add-registry 192.168.1.30:5000‘ # 改为指定的私有仓库
24 INSECURE_REGISTRY=‘--insecure-registry 192.168.1.30:5000‘ # 不加密访问仓库。
`一般私有仓库是建立在内网的,是自用的,可不用加密
]# systemctl restart docker
上传步骤为:先打标签,再上传
‘格式:‘
]# dcoker tag 本地镜像名:标签 仓库IP:5000/镜像名:标签
]# docker push 仓库IP:5000/镜像名:标签
‘例‘
]# docker tag myio:latest 192.168.1.30:5000/myio:latest
]# docker push 192.168.1.30:5000/myio:latest
格式:
]# docker run -it 仓库IP:5000/镜像名:标签
]# docker run -it 192.168.1.30:5000/myio:latest # 第一次启动时会下载
]# curl http://仓库IP:5000/v2/_catalog # 查看仓库里的镜像
]# curl http://仓库IP:5000/v2/镜像名/tags/list # 查看镜像标签
]# curl http://192.168.1.30:5000/v2/_catalog
{"repositories":["docker.io/busybox","docker.io/myos"]}
]# curl http://192.168.1.30:5000/v2/docker.io/busybox/tags/list
{"name":"docker.io/busybox","tags":["latest"]}
]# curl http://192.168.1.30:5000/v2/docker.io/myos/tags/list
{"name":"docker.io/myos","tags":["http"]}
]# docker run -v /data:/data -it docker.io/contos bash
# 将本机的目录/data 映射到容器中的目录/data
-v 映射磁盘到容器中
`NFS 服务器部署192.168.1.254
]# yum -y install nfs-utils
]# mkdir /content
]# chmod 777 /content
]# vim /etc/exports
/content *(rw,no_root_squash)
]# systemctl start nfs-server
]# exports -rv # 查看共享情况
exporting *:/content
]# yum -y install nfs-utils
]# systemctl restart nfs-server
]# showmount -e [NFS服务器IP] # 查看NFS共享
Export list for 192.168.1.254:
/content *
]# mount -t nfs -o rw 192.168.1.254:/content /mnt
]# mount -l # 查看挂载情况
]# docker run -p 80:80 -v /mnt:/var/www/html/ -itd docker.io/myos:http
-p 80:80 # 将真机端口与容器端口绑定
-p 宿主机端口:容器端口
]# docker network list
NETWORK ID NAME DRIVER SCOPE
f494d1a5631e bridge bridge local
212902dda0cf host host local
643aec0181a4 none null local
]# ip a s docker0
]# brctl show docker0 # 启动容器会绑定该网桥
]# docker network create --subnet=10.10.10.0/24 docker1 # 创建一个新的网桥docker1
‘分配默认网桥docker0‘
]# docker run --network=docker0 -it myos:latest # 一般如果是默认网桥是可以不写的。
]# docker run -it docker.io/centos:latest
‘分配网桥docker1
]# dcoker run --network=docker1 -it nginx:latest
]# docker run --network=docker1 -it httpd:latest
原文:https://www.cnblogs.com/SHUN-The-Unique-Soul/p/14287220.html