docker基础

1.docker安装

参考文档
https://docs.docker.com/engine/install/centos/ 
1.安装docker 
sudo yum remove docker docker-client docker-client-latest  docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io
2.国内源
https://developer.aliyun.com/mirror/docker-ce?spm=a2c6h.13651102.0.0.3e221b11uPj8mi
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start
图片.png

2.docker镜像 docker image

2.1 搜索拉取镜像

docker search centos
docker pull centos:7.5.1804
docker pull nginx

2.2 查询镜像

docker images
docker image ls 显示镜像 跟上面命令一样
docker image ls --no-trunc 查询镜像ID的详细信息
docker images -q  仅显示镜像ID 
docker image ls -q 仅显示镜像ID  跟上面命令一样
docker inspect ID/name:tag 查询镜像详细信息

2.3 删除镜像

docker rmi  ID 
docker rmi `docker images -q` 

2.4 导入导出镜像

docker image save nginx >/opt/nginx.tar.gz
docker image load -i /opt/nginx.tar.gz
docker [image] tag centos onlineyh:centos7.8 给centos 修改名字 tag

3.docker容器 docker container

3.1 docker 交互式启动

--name 指定名字
--rm  容器退出就自动销毁
-it 交互式
--privileged=true docker 应用容器 获取宿主机root权限(特殊权限-)
docker run -it --name "test" centos /bin/bash
docker run -it --name "test1" --rm  centos /bin/bash   加--rm后容器退出就自动删除销毁 
docker container ls -a 查看
docker ps -a  查看
docker ps -a  -q 查看id
docker container rm test1 
交互式启动容器 Ctrl+p+q 可以hold住
docker container attach NAME 调入到前台

3.2 docker守护式启动

docker run  -d -p 80:80 --name "testnginx" nginx
docker run  --name testnginx1  -d nginx /bin/sh -c "while true ;do echo hello world; sleep 1;done" 死循环

3.3 docker 端口

指定映射(docker 会自动添加一条iptables规则来实现端口映射)
随机端口是从32768开始顺序向后 
    -p hostPort:containerPort
    -p ip:hostPort:containerPort 
    -p ip::containerPort(随机端口)
    -p hostPort:containerPort/udp  udp端口
    -p 81:80 –p 443:443
随机映射
    docker run -P 80(随机端口)
docker port nginx 查看容器映射的端口信息

3.4 docker 启动关闭

docker  start/stop/restart/kill  test 启动关闭重启
ctrl +d 退出
docker  start -i  test 启动后直接进入容器中

3.5 docker 进入容器

docker container attach testnginx 打开所有窗口一样的界面
docker container exec -it test /bin/bash 子进程的方式登录退出不影响当前容器

3.6 docker 容器内进程查看 日志查看 开机启动

docker ps -a  -q -l
docker container -a -q 新命令跟上面一样
docker ps --no-trunc -a 以详细信息查看内容 默认会自动隐藏内容
docker top testxx  查看容器内的运行进程
docker inspect
docker attach 容器ID|容器名称(工具类)配合ctrl+p+q
docker exec  -i -t  容器ID|容器名称 /bin/bash(服务类),一般是做服务类容器调试用
docker exec -it  centos6.9   /bin/bash
docker logs testxx
docker logs -t testxx 根据时间查看日志 
docker logs -tf testxx 查看实时动态的日志
docker logs -tf  --tail 10 testxx 最后10行
docker logs -tf  --tail 0 testxx
docker run  -d -p 80:80 --restart=always  --name "testnginx" nginx 添加到开机启动
docker update --restart=always testxx 添加开机启动 已运行的容器

4. docker 数据卷

4.1 docker container cp

docker run -d --name nginx  -p 81:80 nginx
docker container cp index.html nginx:/usr/share/nginx/html/ 拷贝文件到容器内 容器删除 就不存在

4.2 docker container -v

docker run -d --name="nginx1" -P -v /data:/usr/share/nginx/html nginx
docker run -d --name="nginx2" -P -v /data:/usr/share/nginx/html nginx  两个容器同时挂载一个数据卷

4.3 docker container 容器卷

docker run -it  --name "httpd_volumes" -v /opt/Volume/a:/opt/a -v /opt/Volume/b:/opt/b centos /bin/bash
如果宿主机文件不存在会自动创建
ctrl +p +q 使其不退出
touch /opt/Volume/{a,b}/test.txt
docker run -d  -p 8085:80 --volumes-from  httpd_volumes --name "http8085"  nginx
docker run -d  -p 8086:80 --volumes-from  httpd_volumes --name "http8086"  nginx
docker container exec -it  http8086 /bin/bash 进入容器查看数据是否存在

4.4 容器手动制作

配置本地局域网yum源
mount  /dev/cdrom /mnt  cdrom挂载
mount -o loop CentOS-7-x86_64-DVD-2003.iso /mnt iso挂载
yum install nginx
vim /etc/nginx/conf.d/default.conf
location / {
        root   /mnt;
        index  index.html index.htm;
        autoindex on;
        autoindex_localtime on;
        autoindex_exact_size off;
        charset utf-8,gbk;
        }
systemctl start nginx
cat  >>/etc/yum.repos.d/cdrom.repo  <<EOF
[cdrom]
name=cdrom
baseurl=http://192.168.122.103
enabled=1
gpgcheck=0
EOF

4.4.1 例如:制作容器 具有ssh功能

https://registry.hub.docker.com/_/centos?tab=tags&page=1&ordering=last_updated 
docker pull centos:7.9.2009 默认centos是8
mv /etc/yum.repo.d/*.repo /tmp
cat  >>/etc/yum.repos.d/cdrom.repo  <<EOF
[cdrom]
name=cdrom
baseurl=http://192.168.122.103
enabled=1
gpgcheck=0
EOF
docker run -it --name "centos_ssh" 8652b9f0cb4c 启动容器
yum install openssh-server -y  安装sshd服务端 附带openssh依赖安装
/usr/sbin/sshd -D &  ssh启动报错
[1] 79
[root@690bd21dfe47 /]# Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key
sshd: no hostkeys available -- exiting.
解决: ssh-keygen -A
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
修改sshd运行在前端
mkdir /var/run/sshd
sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config
/usr/sbin/sshd -D & 启动
yum install lsof -y 
lsof -i :22 查看端口是否容器中运行
echo "123456" | passwd root --stdin  添加密码
宿主机运行:
docker inspect  centos_ssh 查看容器ip地址
ssh root@172.17.0.2 输入密码正常登陆
镜像制作 :
docker commit centos_ssh onlineyh/centos7.9_sshd:v1
镜像运行 映射端口 
docker run -d -p 2222:22 --name=sshd onlineyh/centos7.9_sshd:v1  /usr/sbin/sshd -D
ssh 192.168.122.102 -p 2222 登陆正常

4.4.2 例如:制作容器 具有lamp功能

docker run -it --name "centos_lamp" -v /data/vol/mysql:/var/lib/mysql -v /data/vol/html:/var/www/html 8652b9f0cb4c  运行一个容器
mv /etc/yum.repo.d/*.repo /tmp
cat  >>/etc/yum.repos.d/cdrom.repo  <<EOF
[cdrom]
name=cdrom
baseurl=http://192.168.122.103
enabled=1
gpgcheck=0
EOF
yum install  openssh-server httpd php php-mysql mariadb-server  net-tools -y
mkdir /var/run/sshd
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config
echo "123456" | passwd root --stdin
/usr/sbin/sshd -D &   启动ssh
/usr/sbin/httpd -D FOREGROUND &  启动http
mysql_install_db --user=mysql --datadir=/var/lib/mysql   启动mysql
/usr/bin/mysqld_safe --defaults-file=/etc/my.cnf &
vim /data/vol/html/info.php  测试界面
<?php
    Phpinfo();
?>
mysql -uroot -p
grant all *.* to root@'%' identified by '123456';
grant all *.* to root@'localhost' identified by '123456';
create database discuz charset utf8;
docker commit centos_lamp onlineyh/centos7.9_lamp:v1  手动构建镜像
宿主机操作:
docker run -d --name "centos_lamp1" -v /data/vol/mysql:/var/lib/mysql -v /data/vol/html:/var/www/html -p 80:80 -p 2222:22 -p 33060:3306 onlineyh/centos7.9_lamp:v1 /usr/sbin/sshd -D
wget http://download.comsenz.com/DiscuzX/3.2/Discuz_X3.2_SC_UTF8.zip
unzip Discuz_X3.2_SC_UTF8.zip 
mv upload/* /data/vol/html/
chmod -R go+w config data uc_client uc_server
http://192.168.122.102 下一步 注意mysql服务器输入172.17.0.2 容器的ip 或者手动修改localhost的密码
docker commit centos_lamp1 onlineyh/centos7.9_lamp:v2
[root@gitlab html]# cat /data/vol/html/init.sh   写个脚本
#!/bin/bash
/usr/sbin/httpd -D FOREGROUND &
/usr/bin/mysqld_safe --defaults-file=/etc/my.cnf &
/usr/sbin/sshd -D 
运行下面程序 这样就跑起来了
docker run -d  -v /data/vol/mysql:/var/lib/mysql -v /data/vol/html:/var/www/html -p 80:80 -p 2222:22 -p 33060:3306 onlineyh/centos7.9_lamp:v3 /var/www/html/init.sh
mysql -uroot -h192.168.122.102 -P33060 -p123456
ssh 192.168.122.102 -p2222

5. docker dockerfile

5.1 docker 具有sshd功能

[root@gitlab centos-sshd]# cat dockerfile 
FROM centos:centos7.9.2009
RUN mv /etc/yum.repos.d/*.repo /tmp && echo -e "[cdrom]\nname=cdrom\nbaseurl=http://192.168.122.103\nenabled=1\ngpgcheck=0" >/etc/yum.repos.d/cdrom.repo
RUN yum makecache fast && yum install openssh-server -y && mkdir /var/run/sshd && sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config && ssh-keygen -A
RUN echo "123456"|passwd root --stdin 
EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]
docker build -t "sshd:v1" .   构建
docker run -d -P --name "ssh1" sshd:v1 使用登录测试

5.2 docker使用systemctl命令启动sshd

https://github.com/docker-library/docs/tree/master/centos#systemd-integration
vim Dockerfile
FROM centos:7
ENV container docker
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]
docker build -t "centos7.9:v1" .  基础镜像

[root@gitlab ssh]# vim dockerfile 
FROM centos7.9:v1
RUN mv /etc/yum.repos.d/*.repo /tmp && echo -e "[cdrom]\nname=cdrom\nbaseurl=http://192.168.122.103\nenabled=1\ngpgcheck=0" >/etc/yum.repos.d/cdrom.repo
RUN yum makecache fast && yum install openssh-server iproute net-tools -y && rm -rf /var/cache/yum/*
RUN echo '123456' | passwd root --stdin
RUN systemctl enable sshd
EXPOSE 22
CMD ["/usr/sbin/init"]
docker build -t "centos_sshd:v2" .
docker run -tid --privileged=true --name testssh -v /sys/fs/cgroup:/sys/fs/cgroup:ro -p 2022:22 centos_sshd:v2  注意必须加--privileged=true

5.3 docker使用systemctl命令lamp

FROM centos7.9:v1
RUN mv /etc/yum.repos.d/*.repo /tmp && echo -e "[cdrom]\nname=cdrom\nbaseurl=http://192.168.122.103\nenabled=1\ngpgcheck=0" >/etc/yum.repos.d/cdrom.repo
RUN yum makecache fast && yum install openssh-server iproute net-tools httpd mariadb-server  php php-mysql -y && rm -rf /var/cache/yum/*
RUN echo '123456' | passwd root --stdin
RUN systemctl enable sshd mariadb httpd
VOLUME [ "/var/www/html" ]
EXPOSE 80
EXPOSE 3306
EXPOSE 22
CMD ["/usr/sbin/init"]
docker build -t "lamp:v1" .
docker run -tid --privileged=true --name lamp -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /data/html:/var/www/html -P lamp:v1 

5.4 docker dokcerfile介绍

Docker通过对于在Dockerfile中的一系列指令的顺序解析实现自动的image的构建
  通过使用build命令,根据Dockerfiel的描述来构建镜像
  通过源代码路径的方式
  通过标准输入流的方式
Dockerfile指令:
  只支持Docker自己定义的一套指令,不支持自定义
  大小写不敏感,但是建议全部使用大写
  根据Dockerfile的内容顺序执行
FROM:
  FROM {base镜像}
  必须放在DOckerfile的第一行,表示从哪个baseimage开始构建
MAINTAINER:
  可选的,用来标识image作者的地方
RUN:
  每一个RUN指令都会是在一个新的container里面运行,并提交为一个image作为下一个RUN的base
  一个Dockerfile中可以包含多个RUN,按定义顺序执行
  RUN支持两种运行方式:
    RUN <cmd> 这个会当作/bin/sh -c “cmd” 运行
    RUN [“executable”,“arg1”,。。],Docker把他当作json的顺序来解析,因此必须使用双引号,而且executable需要是完整路径
  RUN 都是启动一个容器、执行命令、然后提交存储层文件变更。第一层 RUN command1 的执行仅仅是当前进程,一个内存上的变化而已,其结果不会造成任何文件。而到第二层的时候,启动的是一个全新的容器,跟第一层的容器更完全没关系,自然不可能继承前一层构建过程中的内存变化。而如果需要将两条命令或者多条命令联合起来执行需要加上&&。如:cd /usr/local/src && wget xxxxxxx
例如 这条命令 mysql_install_db --user=mysql --datadir=/var/lib/mysql  修改成如下
RUN ["mysql_install_db", "--user=mysql"," --datadir=/var/lib/mysql"] 
CMD:
  CMD的作用是作为执行container时候的默认行为(容器默认的启动命令)
  当运行container的时候声明了command,则不再用image中的CMD默认所定义的命令
  一个Dockerfile中只能有一个有效的CMD,当定义多个CMD的时候,只有最后一个才会起作用 
CMD定义的三种方式:
  CMD <cmd> 这个会当作/bin/sh -c "cmd"来执行
  CMD ["executable","arg1",....]
  CMD ["arg1","arg2"],这个时候CMD作为ENTRYPOINT的参数 
EXPOSE 声明端口
  格式为 EXPOSE <端口1> [<端口2>...]。
  EXPOSE 指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。在 Dockerfile 中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;另一个用处则是在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。
entrypoint:
  entrypoint的作用是,把整个container变成了一个可执行的文件,这样不能够通过替换CMD的方法来改变创建container的方式。但是可以通过参数传递的方法影响到container内部
  每个Dockerfile只能够包含一个entrypoint,多个entrypoint只有最后一个有效
  当定义了entrypoint以后,CMD只能够作为参数进行传递
entrypoint定义方式:
  entrypoint ["executable","arg1","arg2"],这种定义方式下,CMD可以通过json的方式来定义entrypoint的参数,可以通过在运行container的时候通过指定command的方式传递参数
  entrypoint <cmd>,当作/bin/bash -c "cmd"运行命令
ADD & COPY:
  当在源代码构建的方式下,可以通过ADD和COPY的方式,把host上的文件或者目录复制到image中
  ADD和COPY的源必须在context路径下
  当src为网络URL的情况下,ADD指令可以把它下载到dest的指定位置,这个在任何build的方式下都可以
work
  ADD相对COPY还有一个多的功能,能够进行自动解压压缩包 只支持.tar.* 不支持zip
ENV:
  ENV key value
  用来设置环境变量,后续的RUN可以使用它所创建的环境变量
  当创建基于该镜像的container的时候,会自动拥有设置的环境变量 
WORKDIR:
  用来指定当前工作目录(或者称为当前目录)
  当使用相对目录的情况下,采用上一个WORKDIR指定的目录作为基准 
USER:
  指定UID或者username,来决定运行RUN指令的用户 
ONBUILD:
  ONBUILD作为一个trigger的标记,可以用来trigger任何Dockerfile中的指令
  可以定义多个ONBUILD指令
  当下一个镜像B使用镜像A作为base的时候,在FROM A指令前,会先按照顺序执行在构建A时候定义的ONBUILD指令
  ONBUILD <DOCKERFILE 指令> <content>
VOLUME:
  用来创建一个在image之外的mount point,用来在多个container之间实现数据共享
  运行使用json array的方式定义多个volume
  VOLUME ["/var/data1","/var/data2"]
  或者plain text的情况下定义多个VOLUME指令
[root@hk tmp]# cat Dockerfile
FROM debian:jessie
RUN buildDeps='gcc libc6-dev make' \
         && apt-get update \
         && apt-get install -y $buildDeps \
         && wget  -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz" \
         && mkdir -p /usr/src/redis \
         && tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \
         && make -C  /usr/src/redis \
         && make -C  /usr/src/redis install \
         && rm -rf /var/lib/apt/lists/* \
         && rm  redis.tar.gz \
         && rm -r /usr/src/redis \
         && apt-get purge -y --auto-remove $buildDeps 
[root@hk tmp]# docker build -t redis:v3.2.5 .  开始构造 是&&不会分出多层
[root@hk tmp]# docker history redis:v3.2.5 --no-trunc 长格式显示构造记录

6. docker registry

6.1 Harbor镜像仓库的搭建

https://github.com/goharbor/harbor/releases
https://docs.docker.com/compose/install/#prerequisites
选择离线安装版harbor-offline-installer-v2.1.2.tgz (offline离线版 online在线版)
wget https://github.com/goharbor/harbor/releases/download/v2.1.2/harbor-offline-installer-v2.1.2.tgz
 Harbor镜像 需要安装docker
            需要有docker-compose
vim docker-compose.yml
version: "3.0" ##定义版本号 
services: ##服务
  tomcat: ##服务名称
    container_name: test ##容器名称
    image: tomcat:8 ##依赖镜像文件名称
    ports: ##映射端口
    - 8081:8080 ##外部 内部
    volumes: ##数据卷
    - /data/test:/etc/test ##外部 内部
        networks:
        - mytest
networks: ##自定义桥
  mytest:
[root@mon02 tomcat]# vim docker-compose.yml 
version: "3.0"
services:
  tomcat8080:
    image: tomcat:8
    ports:
    - 8080:8080
    volumes:
    - /usr/tomcat/webapps:/usr/local/tomcat/webapps
    networks:
    - mayikt_web
  tomcat8081:
    image: tomcat:8
    ports:
    - 8081:8080
    volumes:
    - /usr/tomcat/webapps:/usr/local/tomcat/webapps
    networks:
    - mayikt_web
networks:
  mayikt_web:

portainer可视化

https://portainer.readthedocs.io/en/stable/deployment.html

$ docker volume create portainer_data
$ docker run -d -p 9000:9000 -p 8000:8000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

6.1.1 compose的安装

sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose version

6.1.2 harbor 安装

tar xf harbor-offline-installer-v2.1.2.tgz -C /usr/local/
cd /usr/local/harbor/
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
hostname: 192.168.122.107 域名
#https: 注释掉https
# # https port for harbor, default is 443
#  port: 443
# # The path of cert and key files for nginx
#  certificate: /your/certificate/path
#  private_key: /your/private/key/path
harbor_admin_password: admin  密码
./install.sh
http://192.168.122.107      admin admin

6.1.3 推送镜像

[root@gitlab ~]# cat /etc/docker/daemon.json 
{
  "registry-mirrors": ["http://hub-mirror.c.163.com"],"insecure-registries":["192.168.122.107"]
}
systemctl restart docker
docker image tag nginx:latest 192.168.122.107/onlineyh/nginx:v1
docker login 192.168.122.107
admin
admin
docker push 192.168.122.107/onlineyh/v2ray:v1

6.1.4 拉取镜像 harbor设置公开 不然需要登录

[root@gitlab ~]# cat /etc/docker/daemon.json 
{
  "registry-mirrors": ["http://hub-mirror.c.163.com"],"insecure-registries":["192.168.122.107"]
}
docker pull 192.168.122.107/onlineyh/v2ray:v1

6.1.5 harbor仓库重启关闭

cd /usr/local/harbor/
后台启动容器:docker-compose up -d
查看容器:docker-compose ps
停止并删除容器:docker-compose down
停止启动容器:docker-compose stop; docker-compose start
[root@mysql harbor]# grep "data_volume" harbor.yml
data_volume: /data  有使用数据卷 在宿主机/data 目录 所以再次关闭启动都不会丢失文件
docker login 192.168.122.107 登录成功保存文件如下
[root@gitlab ~]# cat /root/.docker/config.json 
{
    "auths": {
        "192.168.122.107": {
            "auth": "YWRtaW46YWRtaW4="
        }
    }

6.2 docker registry 容器仓库

6.2.1 registry 简单操作

docker pull registry
docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest
docker image tag nginx:latest 192.168.122.107:5000/onlineyh/nginx:v1
docke push 192.168.122.107:5000/onlineyh/nginx:v1
[root@gitlab ~]# curl 192.168.122.107:5000/v2/_catalog  看到信息
{"repositories":["onlineyh/nginx","onlineyh/v2ray"]}

6.2.2registry 密码认证 使用apache认证

生成密码:
yum install httpd-tools -y
mkdir /opt/registry-auth/ -p
htpasswd  -Bbn test 123 >> /opt/registry-auth/htpasswd  >>这样不会覆盖之前的
htpasswd  -Bbn test1 123 >> /opt/registry-auth/htpasswd 
[root@oldboy ~]# docker login 192.168.122.107:5000
Username: test 
Password: 
docker image tag nginx:latest 192.168.122.107:5000/onlineyh/nginx:v2
docke push 192.168.122.107:5000/onlineyh/nginx:v2
docker 关机或者重启服务docker自动启动 
方法一:docker run --restart=always

方法二:"live-restore": true
docker server配置文件/etc/docker/daemon.json参考
{
.....
......
"live-restore": true
}

7. docker 网络

7.1 docker 网络介绍

[root@mysql ~]# docker network ls
NETWORK ID     NAME            DRIVER    SCOPE
e3508f839e38   bridge          bridge    local
ba42d1b01b05   harbor_harbor   bridge    local
f61454c39d00   host            host      local
124d1328b097   none            null      local
docker network rm harbor_harbor  删除网络模式
Docker容器的网络模式
bridge模式,让容器跟docker0网卡桥接。上网通过nat上网
host模式,让容器和宿主机共享网络
none,关闭容器网络
brctl show 查看桥接情况
docker run -d --network=host  nginx:latest 使用 --net=指定网络模式

7.2 Docker跨主机访问-macvlan实现

两台主机同时执行:
网卡设为混杂模式
yum intall -y net-tools 
ifconfig eth0 -promisc  设置混杂模式
ifconfig eth0 -promisc 取消混杂模式
docker network create -d macvlan --subnet=172.16.10.0/24 --gateway=172.16.10.1 -o parent=eth0 mac1
    -d 指定 Docker 网络 driver
    --subnet 指定 macvlan 网络所在的网络
    --gateway 指定网关
    -o parent 指定用来分配 macvlan 网络的物理网卡
docker run -itd --name c1 --ip=172.16.10.2 --network mac1 busybox
docker run -itd --name c2 --ip=172.16.10.3 --network mac1 busybox
docker run -itd --name c3 --ip=172.16.10.30 --net=mac1 busybox

7.3 Docker 跨主机访问-overlay实现

docker run -d -p 8500:8500 -h consul --name consul --alway=restart  progrium/consul -server -bootstrap
[root@gitlab ~]# vim /lib/systemd/system/docker.service   修改下面2行 eth0是网卡 ip 网卡根据实际修改
#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock   原来的
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --cluster-store consul://192.168.122.102:8500 --cluster-advertise eth0:2376  
ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT
ExecReload=/bin/kill -s HUP $MAINPID
systemctl daemon-reload 
systemctl restart docker
创建网络接口
docker network create -d overlay --subnet 172.12.0.0/24 --gateway 172.12.0.1  overlay1
另一台主机修改
[root@gitlab ~]# vim /lib/systemd/system/docker.service   修改下面2行 eth0是网卡 ip 网卡根据实际修改
#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock   原来的
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --cluster-store consul://192.168.122.102:8500 --cluster-advertise eth0:2376  
ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT
ExecReload=/bin/kill -s HUP $MAINPID
systemctl daemon-reload 
systemctl restart docker
docker network ls 查看 另一台主机创建的overlay1 是否已经过来
[root@gitlab ~]# docker network ls
NETWORK ID     NAME              DRIVER    SCOPE
30f908468367   bridge            bridge    local
75a25cb73af0   docker_gwbridge   bridge    local
a5905ea56eeb   host              host      local
fa3e9d1b89ab   mac1              macvlan   local
fceace67fab7   none              null      local
cb58c75922de   overlay1          overlay   global
docker run -it --network overlay1 --name t1  busybox /bin/sh
docker run -it --network overlay1 --name t2  busybox /bin/sh
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容