1.11笔记

优势
  节约成本
  安全
  灵活

虚拟化缺点
  性能降低
  影响面较广
  配置复杂
  建设成本较高

yum install docker -y
systemctl start docker
docker --version
docker run hello-world
vim /etc/docker/daemon.json
systemctl daemon-reload 
systemctl restart docker


docker search centos    搜索
docker pull centos      下载
docker images        查看镜像

[root@node1 ~]# docker run -itd --name test1 5d0d /bin/bash
i  交互式创建
t  创建一个伪终端
d  后台执行
--name  指定名称
/bin/bash  执行的命令

[root@node1 ~]# docker ps    查看当前启动的容器
[root@node1 ~]# docker ps -a  查看所有容器
[root@node1 ~]# docker stop test1  停止
[root@node1 ~]# docker start test1    启动
[root@node1 ~]# docker restart test1  重启
[root@node1 ~]# docker rm 1997      删除
###不能直接删除一个运行中的容器,需要先停止或者使用-f

[root@node1 ~]# docker exec -it test1 /bin/bash  进入容器  
exit  退出容器

[root@node1 ~]# docker run -itd --name nginx1 -p 801:80 nginx  将80端口影射本地801

进入nginx调整页面
[root@node1 ~]# docker exec -it nginx1 /bin/bash
root@645c33a0ed02:/# cd /usr/share/nginx/html/
root@645c33a0ed02:/usr/share/nginx/html# echo "test" > index.html


将本地的目录与容器的目录关联
[root@node1 nginx-web]# docker run -itd --name nginx2 -p 802:80 -v /root/nginx-web/:/usr/share/nginx/html/ nginx


拷贝文件到容器中的制定位置(目录需要使用 -r      docker cp -r)
[root@node1 nginx-web]# docker cp /root/nginx-web/index.html nginx1:/usr/share/nginx/html/index.html
[root@node1 nginx-web]# curl localhost:801
hello
[root@node1 nginx-web]# cat /root/nginx-web/index.html 
hello


docker kill    name/ID    杀死容器


#mkdir testdocker
#cd testdocker/
#vim httpd-run.sh
#!/bin/bash
rm -fr /run/httpd/*
exec /usr/sbin/httpd -DFOREGROUND

#vim index.html
hello welcome 


#vim dockerfile
FROM docker.io/noxiii/centos-yum
MAINTAINER "gongjunhe@localhost"
ADD httpd-run.sh /httpd-run.sh
ADD index.html /var/www/html/index.html
RUN rpm --rebuilddb && yum -y install httpd && chmod -v +x /httpd-run.sh
EXPOSE 80
WORKDIR /
CMD ["/bin/bash","httpd-run.sh"]
#docker build -t centos-yum:apache .
#docker run -itd --name centosapache -p 8080:80 centos-yum:apache 
#docker ps
#curl localhost:8080
hello welcome 

[root@node1 ~]# docker pull docker.io/noxiii/centos-yum
[root@node1 ~]# docker run -itd --name test2 0620 /bin/bash
[root@node1 ~]# docker exec -it test2 /bin/bash


宿主机
[root@node1 ~]# yum install httpd -y
[root@node1 ~]# mount /dev/cdrom /var/www/html/
[root@node1 ~]# systemctl start httpd
http://localhost/Packages/

[root@node1 ~]# docker inspect test2 查看IP地址

容器主机
生成server.repo文件  地址使用http://172.17.0.1
yum install vim samba* -y

docker commit  容器ID 镜像名称:标签
-m 定义描述信息
-a 定义作者

[root@node1 ~]# docker commit test2 centos:samba
[root@node1 ~]# docker images

保存到本地
[root@node1 ~]# docker save -o /root/centos-smb.tar centos:samba


查看当前容器状态,与image发生哪些变化
docker diff   容器名
A add
D del
C change
###当容器内数据发生改变时
docker load -i *.tar 导入


dockerfile
FROM 基础镜像 第一个指令必须是FROM
MAINTAINER 作者
RUN ["可执行文件","参数1","参数2"]
RUN ["./test","a","b"]
RUN  ./test a b \

ADD  src dst 将指定的src复制到dst中
ADD test1.txt /mydata/
ADD test2 test2
ADD a.tar /mytar

COPY
--chown=username:groupname    src    dst
COPY hom* /mydata/
COPY h?me.txt /mydata/
dst 自动创建

差异 copy不支持自动解压缩也不支持从网络获取文件

VOLUME ["/data"] 创建一个可以从本地主机或者其它容器mount的位置

WORKDIR /path/ 为RUN、CMD指定工作目录
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd /a/b/c

USER username:groupname 运行容器的用户

CMD
CMD ["可执行文件","选项1","选项2"]
CMD 可执行 选项1 选项2
只能有一条,如果有多个,最后一条生效
如果用户在启动容器的时候指定了运行的命令,会覆盖掉CMD的内容

RUN 在docker build
CMD docker run

ENTRYPOINT 在执行docker run时 此字段指定的工作不会被覆盖,除非--entrypoint,如果多个,最后一条生效

EXPOSE 监听的端口


三台主机 
node1=192.168.1.3/24 管理&工作
node2=192.168.1.4/24 工作
node3=192.168.1.5/24 工作

1、selinux 防火墙  
2、设置NTP保证时间同步
[root@node1 ~]# vim /etc /ntp.conf 
server 127.127.1.0
fudge 127.127.1.0 stratum 8
[root@node1 ~]# systemctl start ntpd

node2&node3同步时间
[root@node2 ~]# ntpdate 192.168.1.3
[root@node2 ~]# systemctl stop ntpd

[root@node3 ~]# ntpdate 192.168.1.3
[root@node3 ~]# systemctl stop ntpd


修改主机名
[root@node1 ~]# hostnamectl set-hostname node1
[root@node2 ~]# hostnamectl set-hostname node2
[root@node3 ~]# hostnamectl set-hostname node3


确保主机之间可以使用主机名进行访问
[root@node1 ~]# vim /etc/hosts
192.168.1.3     node1
192.168.1.4     node2
192.168.1.5     node3
#ping主机名,确保连通


生成ssh密钥,并拷贝到所有主机上
[root@node1 ~]# ssh-keygen 
[root@node1 ~]# ssh-copy-id root@node1
[root@node1 ~]# ssh-copy-id root@node2
[root@node1 ~]# ssh-copy-id root@node3


#拷贝完成之后测试下

组建swarm集群
[root@node1 ~]# docker swarm init --advertise-addr 192.168.1.3

将node2和node3加入
[root@node2 ~]# docker swarm join \
    --token SWMTKN-1-041tdukoexnav5f6ejr0z5ignzxpzoec3jkbeyaskhzki5mp73-a8eqtnf5himr3j1pco0gqrf1v \
    192.168.1.3:2377
[root@node3 ~]# docker swarm join \
>     --token SWMTKN-1-041tdukoexnav5f6ejr0z5ignzxpzoec3jkbeyaskhzki5mp73-a8eqtnf5himr3j1pco0gqrf1v \
>     192.168.1.3:2377


可在管理节点查看到工作节点
[root@node1 ~]# docker node ls


创建私有仓库


调整内核参数
关闭MTU限制&开转发
[root@node1 ~]# vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_use_pmtu = 0

[root@node1 ~]# sysctl -p
[root@node1 ~]# scp /etc/sysctl.conf node2:/etc/
[root@node1 ~]# scp /etc/sysctl.conf node3:/etc/

[root@node2 ~]# sysctl -p
[root@node3 ~]# sysctl -p


导入仓库镜像
[root@node1 ~]# docker load -i registry2.tar 

创建存放私有镜像的目录
[root@node1 ~]# mkdir -p /opt/data/registry


启动容器
[root@node1 ~]# docker run -itd -p 5000:5000 --restart=always -v /opt/data/registry/:/var/lib/registry --name registry docker.io/registry

[root@node1 ~]# curl 192.168.1.3:5000/v2/_catalog
{"repositories":[]}


调整docker启动文件
[root@node1 ~]# vim /usr/lib/systemd/system/docker.service 
$REGISTRIES   \
            --insecure-registry 192.168.1.3:5000
ExecReload=/bin/kill -s HUP $MAINPID

[root@node1 ~]# systemctl daemon-reload 
[root@node1 ~]# systemctl restart docker

[root@node1 ~]# scp /usr/lib/systemd/system/docker.service node2:/usr/lib/systemd/system/
[root@node1 ~]# scp /usr/lib/systemd/system/docker.service node3:/usr/lib/systemd/system/


向私有仓库上传镜像

加载nginx
[root@node1 ~]# docker load -i nginx.tar 
[root@node1 ~]# docker tag nginx 192.168.1.3:5000/nginx 打标签

上传
[root@node1 ~]# docker push 192.168.1.3:5000/nginx


创建专用网络
[root@node1 ~]# docker network create --driver overlay  hello

部署图形化工具
[root@node1 ~]# docker load -i visualizer.tar 
[root@node1 ~]# docker tag docker.io/dockersamples/visualizer 192.168.1.3:5000/visualizer
[root@node1 ~]# docker push 192.168.1.3:5000/visualizer


启动
[root@node1 ~]# docker run -itd -p 8888:8080 -e HOST=192.168.1.3 -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock --name visualizer 192.168.1.3:5000/visualizer


开启容器集群
[root@node1 ~]# docker service create --replicas 4 --network hello --name nginxweb -p 80:80 192.168.1.3:5000/nginx

查看数量
[root@node1 ~]# docker service ps nginxweb

改变节点数量
[root@node1 ~]# docker service scale nginxweb=12

删除
[root@node1 ~]# docker service rm nginxweb


版权声明:本文为ssss39原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。