docker安装-数据卷-镜像仓库

一 安装

1 yum源准备

curl  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

2 安装依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2
yum list docker-ce.x86_64 --showduplicates | sort -r

3 安装docker-ce

安装最新版本

yum install -y docker-ce

安装指定版本(推荐,当docker命找不到时,重装一遍就可以,不用卸载)

yum install -y --setopt=obsoletes=0 \
docker-ce-17.03.2.ce-1.el7.centos.x86_64 \
docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch

4 启动Docker服务

systemctl daemon-reload
systemctl restart docker
docker version
docker  info

5 配置镜像加速

阿里云Docker-hub

https://cr.console.aliyun.com/cn-hangzhou/mirrors
​
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://uoggbpok.mirror.aliyuncs.com"]
}
EOF
​
systemctl daemon-reload
systemctl restart docker
        
或者:

vim   /etc/docker/daemon.json
   {
       "registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"]
   }
   
docker配置文件目录
vim /usr/lib/systemd/system/docker.service

二 Docker的镜像基础管理

1 基础镜像拉取

docker search centos
docker pull centos:6.9
docker pull centos:7.5.1804
docker pull nginx

2 镜像基本查看

docker image ls
docker image ls --no-trunc  --no-trunc可以看command详情
docker image ls -a -q 查看所有镜像ID

3 镜像详细信息查看

[root@docker /]# docker image inspect ubuntu:latest
[root@docker /]# docker image inspect 82f3b5f3c58f

4 镜像的导入和导出

[root@docker ~]# docker image save 3556258649b2 >/tmp/ubu.tar
[root@docker ~]# docker image rm 3556258649b2
[root@docker ~]# docker image load -i /tmp/ubu.tar
[root@docker ~]# docker image tag 3556258649b2 tangbin/ubu:v1 
导入镜像后可能会出现REPOSITORY和TAG均为none的镜像,修改方式如下
docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)
[root@docker ~]# docker tag 231d40e811cd nginx:latest

5 镜像的删除

[root@docker ~]# docker image rm -f 3556258649b2
[root@docker ~]# docker image rm -f `docker image ls -q`

三 容器的管理

1 容器查看

docker container ls
docker container ls -a -q //查看所有容器ID
docker ps -a -q  //查看所有容器ID
docker container ls -a --no-trunc //查看command信息
docker container inspect 58c78eab31b9 //查看详细信息   
docker top 10424cfc4132  //查看容器资源占用
docker container top 10424cfc4132 //查看容器资源占用
docker container logs 10424cfc4132 //查看容器服务日志
docker container logs -tf 10424cfc4132 //查看容器服务日志,t时间,f为tail -f模式
docker container logs -f 10424cfc4132 //查看容器服务日志,t时间,f为tail -f模式
docker container logs -tf --tail 2 c4e0b5ce07c6 //查看最后两行

2 容器运行

交互式启动容器

docker container run -it  9f38484d220f
docker container run -it --name="centos6.9" 9f38484d220f
启动故障排查 
docker container start -i

守护式容器

docker run -d --name="tangbin_nginx" nginx:1.14
docker container inspect tangbin_nginx  查询容器的详细信息

容器的应用场景

交互式的容器: 工具类: 开发,测试,临时性的任务(退出时自动关闭容器)
[root@docker ~]# docker container run -it --name="tangbin_cent76"  --rm 9f38484d220f
守护式容器: 网络服务
[root@docker /]# docker run -d -p 8080:80 --name="tangbin_nginx_80" nginx:1.14

3 容器的启动\关闭\连接

守护式容器的关闭和启动
[root@docker /]# docker container stop tangbin_nginx_80
[root@docker /]# docker container start tangbin_nginx_80

交互式的容器的关闭和启动
[root@docker /]# docker container stop nervous_allen
[root@docker /]# docker container start -i  nervous_allen

容器的连接方法(后台启动后,没退出时使用):
[root@docker /]# docker container attach nervous_allen

子进程的方式登录(在已有工作容器中生成子进程,做登录.可以用于进行容器的调试,退出时也不会影响到当前容器)
[root@docker ~]# docker container exec -it n2 /bin/bash

批量清除容器
docker container rm -f `docker container ls -a -q`

重启docker服务,容器全部退出的解决办法
方法1:添加 --restart=always 
docker run -d -p 8080:80 --restart=always --name="tangbin_nginx_80" nginx:1.14
方法2: 在配置文件里添加"live-restore": true
docker server配置文件/etc/docker/daemon.json参考
{
.....
......
 "live-restore": true
}

4 容器切换

docker container exec -it n1 /bin/bash  //登录守护试容器前台(如nginx),ctrl+D退出时也不影响。
ctrl + P Q   //让容器的后台及前台运行,交互式容器ctrl+D退出会关闭容器。
docker container attach 容器名称或容器id  //进入到容器前台,不适合nginx守护试容器。 

5 容器运行时网络映射

docker run -d -p 80:80 --name="n1" nginx:1.14   //对外所有主机可以访问,映射8080端口。 *****
docker run -d -p 192.168.67.18:8081:80 --name="n3" nginx:1.14 //对外指定主机,映射8081端口。*****
docker run -d -p 80 --name="n4" nginx:1.14  //对外所有主机可以访问,随机映射端口32768-60999。
docker run -d -p 192.168.67.18::80 --name="n5" nginx:1.14 //对外指定主机,映射随机端口32768-60999。
docker run -d -p 8082:80 -p 8083:443 --name="n6" nginx:1.14 //所有主机,多端口映射。
docker run -d -p 80:80 -v /opt/html:/usr/share/nginx/html --name="n1" nginx  //端口映射,目录映射,容器和本地目录共享。/opt/html为本地目录,/usr/share/nginx/html为容器目录

指定映射(docker 会自动添加一条iptables规则来实现端口映射)

    -p hostPort:containerPort
    -p ip:hostPort:containerPort 
    -p ip::containerPort(随机端口:32768-60999)
    -p hostPort:containerPort/udp
    -p 81:80 –p 443:443

三 数据卷使用

1 手工交互数据

docker container cp index.html n3:/usr/share/nginx/html/  把本地的文件拷贝到容器
docker container cp n3:/usr/share/nginx/html/50x.html ./  把容器文件拷贝到本地

2 Volume实现宿主机和容器的数据共享

开启两个nginx容器(80,81),共同挂载一个数据卷,实现数据持久化静态资源共享。

作用:数据持久化存储,如果不持久化,容器摧毁时,数据会丢失。

docker run -d -p 80:80 -v /opt/html:/usr/share/nginx/html --name="n1" nginx  
docker run -d -p 81:80 -v /opt/html:/usr/share/nginx/html --name="n2" nginx

3 数据卷容器

作用: 在集中管理集群中,大批量的容器都需要挂载相同的多个数据卷时,可以采用数卷容器进行统一管理

(1)宿主机模拟数据目录

mkdir -p /opt/Volume/a
mkdir -p /opt/Volume/b
touch /opt/Volume/a/a.txt
touch /opt/Volume/b/b.txt

(2)启动数据卷容器

docker run -it  --name "nginx_volumes" -v /opt/Volume/a:/opt/a  -v /opt/Volume/b:/opt/b centos:7.5.1804  /bin/bash
ctrl p q (交互式运行容器,用ctrl+D会关闭容器)

(3)使用数据卷容器

参数--volumes-from 使用哪个数据卷(第2步数据卷的名称)

docker run -d  -p 8085:80 --volumes-from  nginx_volumes --name "n8085"  nginx
docker run -d  -p 8086:80 --volumes-from  nginx_volumes --name "n8086"  nginx

[root@docker01 ~]# docker run -d  -p 8085:80 --volumes-from  nginx_volumes --name "n8085"  nginx
1bc2051db0ba921c454d4dd1e10cfd250027b8ab29172c64f99b88c2d0327068
[root@docker01 ~]# docker run -d  -p 8086:80 --volumes-from  nginx_volumes --name "n8086"  nginx
3227e4c3ecc84176cb91941a786585476dd17e8039e5d92a61dac740df272f04
[root@docker01 ~]# docker container exec -it n8085 /bin/bash
root@1bc2051db0ba:/# ls /opt/
a  b
root@1bc2051db0ba:/# ls /opt/a
a.txt  c.txt

(4)查看容器挂载路径

docker container inspect nginx_volumes

 

四 本地yum源配置

制作本地局域网yum源

1 安装vsftpd软件

 yum install -y vsftpd

2 启动ftp

 systemctl enable vsftpd
 systemctl start vsftpd

3 上传系统进行到虚拟机

略.

4 配置yum仓库

mkdir -p /var/ftp/centos6.9 
mkdir -p /var/ftp/centos7.5
[root@docker mnt]# mount -o loop /mnt/centOS-6.9-x86_64-bin-DVD1.iso  /var/ftp/centos6.9/
[root@docker mnt]# mount -o loop /mnt/centos-7-x86_64-dvd-1804.iso  /var/ftp/centos7.5/

windows验证 ftp://192.168.67.18/centos6.9/

 

在容器操作,把/etc/yum.repos.d目录下的删除,重新构建新的yum源。

cat >/etc/yum.repos.d/ftp_6.repo <<EOF 
[ftp]
name=ftpbase
baseurl=ftp://172.17.0.1/centos6.9
enabled=1
gpgcheck=0
EOF
cat >/etc/yum.repos.d/ftp_7.repo <<EOF 
[ftp]
name=ftpbase
baseurl=ftp://172.17.0.1/centos7.5
enabled=1
gpgcheck=0
EOF
在容器操作

yum clean all
yum makecache
yum install -y openssh*
yum install -y openssh-server
/etc/init.d/sshd start  //启动ssh ,centos6.9系统,centos7.5是另一种方式
passwd  设置密码123456
ifconfig 看ip
用主机连接 ssh 172.17.0.2
用主机制作镜像 docker  commit centos6.9 tangbin0505/centos6.9_sshd:v1

启动容器时,通过前台启动ssh,不需要手工启动(这时进去不了容器)
docker run -d --name="sshd" f3cacf803d1c镜像ID /usr/sbin/sshd -D 
docker container inspect 9620f5bb9922(容器ID) 查看容器ip
通过映射端口启动
docker run -d --name="sshd_2222" -p 2222:22 f4ee78227dad /usr/sbin/sshd -D
然后通过xshell5 连接 192.168.67.18 端口2222 账号root 密码123456
如果启动多个进程服务,需要写脚本
[root@docker html]# cat init.sh 
#!/bin/bash
/etc/init.d/mysqld start 
/etc/init.d/httpd start
/usr/sbin/sshd -D

docker container run -d --name="oldguoyun_lamp_bbs" -v /opt/vol/mysql:/var/lib/mysql -v /opt/vol/html:/var/www/html  -p 22222:22 -p 8888:80 -p 33060:3306 ac8888ea3e21 /var/www/html/init.sh

五 镜像制作

镜像的制作

docker  commit centos6.9 tangbin0505/centos6.9_sshd:v1

基于新镜像启动容器实现,centos6.9+sshd的功能

docker run -d --name="sshd_2222" -p 2222:22 f4ee78227dad /usr/sbin/sshd -D

centos6.9+sshd
启动基础镜像容器 
 
docker run -it --name="oldguo_centos" centos:6.9
安装所需要的软件包 ,并且启动测试
mv /etc/yum.repos.d/*.repo /tmp
echo -e "[ftp]\nname=ftp\nbaseurl=ftp://172.17.0.1/centos6.9\ngpgcheck=0">/etc/yum.repos.d/ftp.repo
yum makecache fast && yum install openssh-server -y
/etc/init.d/sshd start     ----->重要:ssh第一次启动时,需要生成秘钥,生成pam验证配置文件
/etc/init.d/sshd stop
echo "123456" | passwd --stdin 

centos7.5+sshd

mv /etc/yum.repos.d/*.repo /tmp
echo -e "[ftp]\nname=ftp\nbaseurl=ftp://172.17.0.1/centos7.5\ngpgcheck=0">/etc/yum.repos.d/ftp.repo
yum makecache fast && yum install openssh-server  -y

mkdir /var/run/sshd
echo 'UseDNS no' >> /etc/ssh/sshd_config
sed -i -e '/pam_loginuid.so/d' /etc/pam.d/sshd
echo 'root:123456' | chpasswd
/usr/bin/ssh-keygen -A

六 Docker构建私有registry(端口5000)

1 启动registry

docker run -d -p 5000:5000 --restart=always --name registry -v /opt/registry:/var/lib/registry  registry

2 修改配置文件

vim /etc/docker/daemon.json

{
  "registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"],
   "insecure-registries": ["192.168.67.18:5000"]
}

3 重启

systemctl restart docker

4 制作本地镜像并push

[root@docker ~]# docker tag nginx 192.168.67.18:5000/oldguo/nginx:v1 [root@docker ~]# docker images [root@docker ~]# docker push 192.168.67.18:5000/oldguo/nginx:v1

5 异地进行pull镜像

docker pull 10.0.0.100:5000/oldguo/nginx:v1

6 本地仓库加安全认证

生成密码:
yum install httpd-tools -y
mkdir /opt/registry-auth/ -p
htpasswd  -Bbn ben 123 > /opt/registry-auth/htpasswd

7 重新启动带有秘钥功能的registry容器

docker rm -f `docker ps -aq`
docker run -d -p 5000:5000 -v /opt/registry-auth/:/auth/ -v /opt/registry:/var/lib/registry  --name register-auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry 

8 push镜像,需要进行login

[root@oldboy ~]# docker login 10.0.0.100:5000
Username: ben  
Password: 

七 重启docker服务,容器全部退出的解决办法

方法一:docker run  --restart=always

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

八 docker-habor实现图形化镜像仓库

1 安装docker和docker-compose

yum install -y docker-compose 

2 下载harbor-offline-installer-vxxx.tgz 3 上传到/opt,并解压 4 修改harbor.cfg配置文件

hostname = 192.168.67.18
harbor_admin_password = 123456

5 执行install.sh

[root@docker01 harbor]# ./prepare
[root@docker01 harbor]# ./install.sh 

6 修改配置文件

vim /etc/docker/daemon.json

{
  "registry-mirrors": ["https://uoggbpok.mirror.aliyuncs.com"],
  "insecure-registries": ["192.168.67.18:5000","192.168.67.18"],
  "live-restore": true
}

7 重启

systemctl restart docker

8 登录habor添加项目

参考https://blog.csdn.net/zyl290760647/article/details/83752877

9 制作镜像并上传habor

[root@docker harbor]# docker tag centos:6.9 192.168.67.18/tangbin/centos:v1
[root@docker harbor]# docker login 192.168.67.18
[root@docker harbor]# docker push 192.168.67.18/tangbin/centos:v1

10 在节点中pull habor中的镜像

docker pull 192.168.67.18/tangbin/centos:v1

11 设置harbor开机自启动

查看目录find / -name harbor: /opt/harbor

查看docker-compose路径:which docker-compose

新建文件,制作systemd服务

vim /usr/lib/systemd/system/harbor.service

[Unit]
Description=Harbor
After=docker.service systemd-networkd.service systemd-resolved.service
Requires=docker.service
Documentation=http://github.com/vmware/harbor

[Service]
Type=simple
Restart=on-failure
RestartSec=5
ExecStart=/usr/bin/docker-compose -f /opt/harbor/docker-compose.yml up
ExecStop=/usr/bin/docker-compose -f /opt/harbor/docker-compose.yml down

[Install]
WantedBy=multi-user.target

保存退出

设置开机启动

systemctl enable harbor

systemctl start harbor

八 docker-网络模型

1 查看支持网络类型

docker network ls

2 测试使用各类网络类型

docker run network=xxx
none : 无网络模式
bridge : 默认模式,相当于NAT
host : 公用宿主机Network NameSapce
container:与其他容器公用Network Namespace

3 Docker跨主机访问-macvlan实现

docker network create --driver macvlan --subnet=100.0.0.0/24 --gateway=100.0.0.254 -o parent=eth0 macvlan_1
ip link set eth0 promsic on (ubuntu或其他版本需要)
[root@docker ~]# docker run -it --network macvlan_1 --ip=10.0.0.11 oldguo/centos6.9-sshd:v1.0  /bin/bash
[root@docker ~]# docker run -it --network macvlan_1 --ip=10.0.0.12 centos:6.9  /bin/bash

4 Docker 跨主机访问-overlay实现

(1)启动 consul 服务,实现网络的统一配置管理(只需在docker01装consul)

consul:kv类型的存储数据库(key:value)

docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap

在docker01、02上配置(低版本17.03)

vim /etc/docker/daemon.json 版本17.03

vim /lib/systemd/system/docker.service 新版本

vim /etc/sysconfig/docker 版本Docker version 1.12.6

 

vim  /etc/docker/daemon.json
{
    "registry-mirrors": ["https://uoggbpok.mirror.aliyuncs.com"],
  "insecure-registries": ["192.168.67.18:5000","192.168.67.18"],
  "live-restore": true,
   "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
  "cluster-store": "consul://192.168.67.18:8500",
  "cluster-advertise": "192.168.67.18:2376"
}
vim  /etc/docker/daemon.json
{
    "registry-mirrors": ["https://uoggbpok.mirror.aliyuncs.com"],
  "insecure-registries": ["192.168.67.18:5000","192.168.67.18"],
  "live-restore": true,
   "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
  "cluster-store": "consul://192.168.67.18:8500",
  "cluster-advertise": "192.168.67.18:2376"
}

修改配置文件(高版本需要改这个,17.03版本按上述改)

vim /usr/lib/systemd/system/docker.service  在ExecStart这行改
ExecStart=/usr/bin/dockerd daemon -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --cluster-store=consul://192.168.67.18:8500 --cluster-advertise=192.168.67.18:2376 

--cluster-store 指向 consul 服务节点
--cluster-advertise 指向本机提供服务的 IP/网卡:端口

重启

systemctl daemon-reload 
systemctl restart docker

(2)创建overlay网络

参考官网 https://docs.docker.com/engine/reference/commandline/network_create/#specify-advanced-options

参考 https://blog.csdn.net/weixin_33860147/article/details/91767148

先检查consul 容器有没启动,没启动的话,就先执行启动(这里的consul容器ID为974f970ded62)
docker container start 974f970ded62
docker network create -d overlay --subnet 172.16.0.0/24 --gateway 172.16.0.254  overlay
查看网络驱动
docker network ls

(3)两边启动容器测试

docker run -it --network  overlay   busybox /bin/sh

每个容器有两块网卡,eth0实现容器间的通讯,eth1实现容器访问外网

 

九 k8s安装部署

待续

(1)同步集群状态

Etcd 轻量级K-V 还有自动发现功能,有集群

Zookeeper 重量级,淘宝有用,有集群

Consul 网络集群,K-V

(2)服务发现 Etcd Haproxy

(3)日志监控 ELK stack ,Prometheus

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值