设为首页 收藏本站
查看: 688|回复: 0

[经验分享] docker的搭建及使用

[复制链接]

尚未签到

发表于 2019-2-21 07:43:34 | 显示全部楼层 |阅读模式
yum search 包名        查找软件包
yum list |grep -i "vim" 查找软件包名
yum provides *vim   查找软件包名
which httpd (查看路径)
rpm -qf /usr/bin/httpd(查看包名)
rpm -qc httpd(查看配置文件)
sysctl -w net.ipv4.ip_forward=1  打开路由
iptables -t nat -A POSTROUTING -s 192.168.4.0/24 -o p8p1 -j MASQUERADE 实现虚拟机上网
cat 编辑器
cat 0< a.txt = cat ji.repo flsdfdf
>abc
容器
容器技术的核心有以下几个内核技术组成:
CGroups(Control Groups)资源管理
NameSpace-进程隔离
SELinux安全
由于是物理机上实施隔离,启动一个容器,可以像启动一个进程一样快速
Docker
Docker是完整的一套容器管理系统
Docker提供了一组命令,让用户更加直接方便地使用容器技术,而不需要过多关心底层内核技术
优点:
相比于传统的虚拟化技术,容器更加简介高效。
传统虚拟机需要给每个VM安装操作系统。
容器使用的公共库和程序。
缺点:
容器的隔离性没有虚拟化强。
共用Linux内核,安全性有先天缺点。
SELinux难以驾驶。
监控容器和容器排错是很棘手的。
镜像
在Docker中容器是基于镜像启动的。
镜像是启动容器的核心。
镜像采用分层设计。
使用快照的cow技术,确保底层数据不丢失。
清除防火墙记录:
iptables -t nat -F  (清除所有记录)
iptables -t nat -X  (清除自定义记录)
iptables-save
一 安装包docker-engine
yum -y install docker-engine
二 启动服务
systemctl start docker
systemclt enable docker
docker 选项
-version  查看版本
-search   搜索镜像
-images   查看镜像列拜
-pull     下载镜像
-push     上传镜像
-save     镜像另存为tar包
-load     使用tar包导入镜像
-rmi      删除本地镜像
-history  查看镜像制作历史
-inspect  查看镜像底层信息
-tag      修改镜像名和标签(创建软连接)
docker images
docker help pull 帮助
格式:docker pull [OPTIONS] NAME:[:TAG|@DIGEST]
docker pull rhe17  下载镜像
docker load < xx.tar   导入镜像
docker save  rhe17 > xx.tar 导出镜像
docker history centos
docker tag  rhe17:latest wode:biaoqian 创建软连接
docker inspect rhe17
docker images 查看镜像列表
镜像仓库名             镜像标签                    镜像ID              创建时间              大小
REPOSITORY           TAG             IMAGE ID            CREATED          SIZE
php                  latest              988e578c487e        15 months ago    33.18 MB
命令列表:
docker run       运行容器
docker ps        查看容器列表
docker stop      关闭容器
docker start     启动容器
docker restart   重起容器
docker attache|exec  进入容器
docker inspect    查看容器底层信息
docker top        查看容器进程列表
docker rm         删除容器
例:
docker run --name 自定义容器名
docker run -v 挂载
docker run -link 2台连接起来
docker run -i交互
docker run -t终端
docker run -d后台
docker run -d -p(端口映射)
docker run -d -p 80(物理机端口):80(容器nginx端口) nginx
docker run -it centos /bin/sh(在容器里要执行的命令) exit直接退出便会杀死上帝进程,导致容器关闭
docker run -itd centos /bin/sh(在容器里要执行的命令) 放入后台,可以用docker ps 查看到
docker ps -a  查看所有容器列表
docker ps -aq 仅显示容器id号
docker stop/start/restart 9a5c63e34644 (容器id号)
docker attach -it 9a5c63e34644 /bin/bash(在容器里要执行的命令)  进入上帝进程,exit直接退出便会杀死上帝进程,导致容器关闭
docker exec -it 9a5c63e34644 /bin/bash (在容器里要执行的命令)   在上帝进程下创建一个子进程进入子进程,exit退出也不会关闭容器
docker inspect  9a5c63e34644 查看容器底层信息
docker top  9a5c63e34644   查看容器进程列表
docker rm  9a5c63e34644 删除容器
docker rm  `docker ps -aq` 删除所有容器
mysql的指定user启动:
mysqld --initialize --user=mysql
自定义镜像
docker commit  
使用镜像启动容器,在该容器基础上修改,另存为另一个镜像。
docker images
docker commit d3d188ad882cc myos:laters  创建名为myos的镜像
Dockerfile
自己编写镜像的内容
Dockerfile语法格式
FROM           基础镜像
MAINTAINER     镜像创建者信息
EXPOSE         开放的端口
ENV            设置变量
ADD            复制文件到镜像
RUN            制作镜像时执行的命令,可以有多个
WORKDIR        定义容器默认工作目录
CMD            容器启动时执行的命令,仅可以有一条CMD
ENTRYPOINT  格式类似CMD
容器启动时要执行的命令,它和CMD很像,也是只有一条生效,如果写多个只有最后一条有效。和CMD不同是:CMD 是可以被 docker run 指令覆盖的,而ENTRYPOINT不能覆盖
Dockerfile 工作流程
构建一个有基本命令的镜像
mkdir /root/build
cd /root/build
cp /etc/yum.repos.d/xixi.repo /root/build/
vim Dockerfile
FROM centos (基础镜像)
RUN rm -rf /etc/yum.repos.d/*.repo
ADD local.repo /etc/yum.repos.d/xixi.repo  前面本地路径  后面为镜像路径
RUN yum -y install net-tools psmisc vim-enhanced iproute
CMD ["/bin/bash","-DFOREGROUND"]
docker build -t imagedname(镜像名)  Dockerfile (当前目录名)
docker build -t  http:laters   /root/build/
构建一个有http和ssh服务的镜像
mkdir /root/build
cd /root/build
mkdir /root/build/dockerfile
cp /etc/yum.repos.d/xixi.repo /root/build/
vim oo.sh
#!/bin/bash
EnvironmentFile=/etc/sysconfig/sshd
/usr/sbin/sshd -D &
EnvironmentFile=/etc/sysconfig/httpd
/usr/sbin/httpd -DFOREGROUND &
wait
chmod 755 oo.sh
vim Dockerfile
FROM centos
MAINTAINER luozixu
RUN rm -rf /etc/yum.repos.d/*.repo
ADD   local.repo  /etc/yum.repos.d/xix.repo
RUN yum -y install net-tools psmisc vim-enhanced iproute  httpd openssh-server
ENV EnvironmentFile=/etc/sysconfig/sshd
RUN  /usr/sbin/sshd-keygen &>/dev/null
RUN echo "123456" |passwd --stdin root
ADD oo.sh /etc/init.d/oo.sh
EXPOSE 22 80
CMD ["/etc/init.d/oo.sh"]
docker build -t  abc:latest  /root/build/dockerfile/
docker run -itd -p 222:22 -p 80:80  abc:latest
docker run -itd   -p 222:22  --name /my-mysql  quan  /bin/bash
我们在使用Docker的时候,经常可能需要连接到其他的容器,比如:web服务需要连接数据库。按照往常的做法,需要先启动数据库的容器,映射出端口来,然后配置好客户端的容器,再去访问。其实针对这种场景,Docker提供了--link 参数来满足。
docker run --name mysql -e MYSQL_ROOT_PASSWORD=server -d mysql
docker run --name nginx --link mysql:aliasmysql -d nginx
docker run -d -v  /usr/docker_file/NginxDemo.war:/usr/local/tomcat/webapps/NginxDemo.war -p 8080:8080 docker.io/tomcat  
构建一个nginx的Dockerfile文件:
FROM nginx
MAINTAINER luozixu
RUN mv /etc/nginx/nginx.conf /etc/nginx/nginx.confback
ADD nginx.conf  /etc/nginx/nginx.conf
RUN mkdir /opt/cert/
RUN mkdir -p  /opt/nginx/temp
RUN mkdir /etc/nginx/logs/
RUN touch /etc/nginx/logs/error.log
ADD server.crt server.csr server.key /opt/cert/
EXPOSE 80 443
ENTRYPOINT /usr/sbin/nginx -c /etc/nginx/nginx.conf && /bin/bash
自定义镜像仓库
流程:
docker pull registry
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry=ip:5000
systemctl daemon-reload
systemctl restart docker
docker run -id -p 5000:5000  registry
docher tag  镜像  ip地址:5000/镜像:latest
docker push  ip地址:5000/镜像:latest
进入registry容器查看/etc/docker/registry/config.yml
例:
docker images
docker run -id -p 5000:5000 registry
docker tag ubuntu:latest  192.168.4.6:5000/ubuntu
vim /etc/docker/daemon.json
{
"insecure-registries" : ["192.168.4.6:5000"]
}
docker push 192.168.4.20:5000/ubuntu
firefox http://192.168.4.20:5000/v2/_catalog
firefox http://192.168.4.20:5000/v2//tags/list
docker rmi ubuntu:latest (删除ubuntu镜像)
docker run -itd 192.168.4.20:5000/ngins:latest(网络源镜像)
存储卷
卷的概念
docker容器不保持任何数据
重要数据请使用外部卷存储(数据持久化)
容器可以挂载真实机目录或共享存储为卷
主机卷的映射
将真实机目录挂载到容器中提供持久化存储
touch /root/a.txt
docker run -v /root/a.txt  -it nginx:laest /bin/bash (-v:同步/root/a.txt文件)
共享存储
一台共享存储服务器可以提供给所有Docker主机使用
共享存储服务器(NAS、SAN、DAS等)
如:
– 使用NFS创建共享存储服务器
– 客户端挂载NFS共享,并最终映射到容器中
Docker主机
– mount挂载共享
– 运行容器时,使用-v选项映射磁盘到容器中
Linux网桥
创建虚拟网卡
真实网卡配置文件
– cat /etc/sysconfig/network-scripts/ifcfg-eth0
虚拟网卡配置文件
– cat /etc/sysconfig/network-scripts/ifcfg-eth0:0
# cat /etc/sysconfig/network-scripts/ifcfg-eth0:0
TYPE=Ethernet
BOOTPROTO=static
... ...
NAME=eth0:0
DEVICE=eth0:0
ONBOOT=yes
IPADDR=192.168.4.15
创建虚拟网桥
# cat /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
BOOTPROTO=static
... ...
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.4.15
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=static
... ...
NAME=eth0
DEVICE=eth0
BRIDGE=br0
ONBOOT=yes
IPADDR=192.168.4.15
[root@jacob ~]# ~]# brctl show
Docker网络拓扑
查看默认Docker创建的网络模型
# docker network list
# ip a s docker0
# brctl show docker0  //启动容器会绑定该网桥
新建Docker网络模型
# docker network create --driver bridge test01
# docker network list
# ip a s
# docker network inspect test01
查看默认Docker创建的网络模型
– 自定义网段
# docker network create --subnet=172.30.0.0/16 test01
启动容器,使用刚刚创建的自定义网桥
# docker run --network=bridge|host|none ... ...
# docker run --network=test01 -id nginx
客户端访问容器内的资源
默认容器通过SNAT可以访问外网
但外部网络的主机不可以访问容器内的资源
端口映射
– 使用端口映射可以实现外部网络访问容器内的资源
# docker run -p 8080 80 -id nginx
//如:真实机IP为192.168.4.5,
使用-p映射真实机的8080端口到容器中的80端口
# firefox http://192.168.4.5
添加网桥
brctl --help
brctl addbr br0
brctl delbr br0 删除br0
ip link  set br0 up 激活网桥
brctl show  查看
添加网卡
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1
vim /etc/sysconfig/network-scripts/ifcfg-eth1
.......
/etc/init.d/network  reload
brctl addif br0 eth1 把网卡eth1加入到br0里
nmcli con  查看
分屏 :
yum -y install screen
screen
ctrl+a shift+s
ctrl+a shift+|
ctrl+a tab
ctrl+a ctrl+c




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-675051-1-1.html 上篇帖子: CentOS7使用Docker Overlay2存储驱动 下篇帖子: Docker讲解与实战,精炼易懂!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表