docker容器

docker快速入门01
docker快速入门02
KVM和Docker的对比

docker常用命令

systemctl start docker    ---启动容器服务
systemctl enable docker   ---容器服务开机自启
docker version            ---查看docker的版本
ctrl pq                   ---静悄悄的离开容器(容器不停)
docker run -d -p 80:80 nginx    ---启动带nginx镜像的容器
run                       ---创建并运行一个容器
-d                        ---放在后台
-p                        ---指定端口映射(访问外网)
-P                        ---随机分配端口映射
nginx                     ---docker镜像的名字
docker search             ---搜索镜像
docker pull               ---从配置的镜像网站拉取镜像
docker image ls           ---查看拥有的镜像
docker image save -o docker_busybox1.29.tar.gz busybox:1.29   ---把镜像导到当前目录下并取名加版本号加文件后缀
docker image rm busybox:1.29 ---删除镜像(加具体版本否则删最新)
docker image load -i docker_busybox1.29.tar.gz  ---导入镜像
docker image build        ---制作镜像
docker image history      ---查看镜像制作的历史
docker run -it --name  centos:6.9 /bin/bash   ---运行并进入一个容器并指定名称分配容器的初始命令
-it                       ---分配交互式终端
--name                    ---指定容器的名字
/bin/bash                 ---覆盖容器的初始命令
docker ls -a 容器名字或ID ---查看所有容器的状态(不加-a查看运行中的容器)
docker start 容器名字或ID ---启动容器
docker stop 容器名字或ID  ---停止容器
docker kill 容器名字或ID  ---杀掉容器
docker container ls -a -l ---只显示最近的一个容器
docker container rm       ---删除一个容器
docker container prune    ---删除未运行的容器
docker ps -a              ---显示所有容器(包括未运行的)
docker ps -a -l			  ---只显示最新的容器
docker ps -a -q           ---只显示所有容器的ID
docker exec -it 容器名字或ID /bin/bash  ---进入一个容器
docker run -d -p 80:80 -v /opt/xiaoniao:/usr/share/nginx/html nginx:latest   ---将小鸟代码挂载到容器nginx首页目录下 
-v /date                  ---第一次卷是空的时,容器里的数据会复制到卷中;卷内有数据时将卷挂载到容器
docker volume ls          ---查看数据卷
docker volume inspect xiaoniao    ---查看小鸟卷的详细信息

什么是容器?

容器就是在隔离的环境运行的一个进程,如果进程停止,容器就会销毁。隔离的环境拥有自己的系统文件,ip地址,主机名等

kvm虚拟机,linux,系统文件

image

程序:代码,命令
进程:正在运行的程序

容器和虚拟化的区别

linux容器技术,容器虚拟化和kvm虚拟化的区别

kvm虚拟化: 需要硬件的支持,需要模拟硬件,可以运行不同的操作系统,启动时间分钟级(开机启动流程)

#linux开机启动流程:
bios开机硬件自检
根据bios设置的优先启动项boot  网卡 硬盘 u盘 光驱
读取mbr引导 2T  UEFI(gpt分区)    mbr硬盘分区信息,内核加载路径, 
加载内核
启动第一个进程/sbin/init  systemd
系统初始化完成
运行服务(nginx,httpd,mysql)

#容器启动流程:
共用宿主机内核:
第一个进程直接启动服务(nginx,httpd,mysql)

容器和虚拟机的区别:
容器:共用宿主机内核,轻量级,损耗少,启动快,性能高,只能运行在linux系统上
虚拟机:需要硬件的支持,需要模拟硬件,需要走开机启动流程,可以运行不同的操作系统

容器是linux内核独有的技术

性能好,速度快,损耗少 ,秒级启动,只能在linux上运行

容器技术的发展过程:

chroot技术

参考资料:[https://www.ibm.com/developerworks/cn/linux/l-cn-chroot/](https://links.jianshu.com/go?to=https%3A%2F%2Fwww.ibm.com%2Fdeveloperworks%2Fcn%2Flinux%2Fl-cn-chroot%2F)
练习1:使用chroot监狱限制SSH用户访问指定目录和使用指定命令(cp,ls)
[https://linux.cn/article-8313-1.html](https://links.jianshu.com/go?to=https%3A%2F%2Flinux.cn%2Farticle-8313-1.html)
ls

docker安装

Docker提供了两个版本:社区版(CE)和企业版(EE)。
操作系统要求
以Centos7为例,且Docker要求操作系统必须为64位,且centos内核版本为3.1及以上。
查看系统内核版本信息:
uname -r
​
0 准备
卸载旧版本:
yum remove docker docker-common docker-selinux docker-engine
​yum remove docker-ce
​
卸载后将保留/var/lib/docker的内容(镜像、容器、存储卷和网络等)。
rm -rf /var/lib/docker
​
安装依赖软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
​
# 安装前可查看device-mapper-persistent-data 和 lvm2 是否已经安装
rpm -qa | grep device-mapper-persistent-data
rpm -qa | grep lvm2
​
​
安装Base源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
​
下载docker源
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
​
把docker官网地址改为清华源
sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
​
更新yum软件包索引
yum makecache fast
​
二、安装
安装最新版本docker-ce
yum install docker-ce -y
​
#安装指定版本docker-ce可使用以下命令查看
yum list docker-ce.x86_64  --showduplicates | sort -r
​
# 安装完成之后可以使用命令查看
docker version

在docker上装一个nginx

软件包下载链接: 提取码: mnsw

wget http://192.168.37.202/linux59/docker_nginx1.15.tar.gz
ls
docker load -i docker_nginx1.15.tar.gz 
docker run -d -p 80:80 nginx

image

docker run -d -p 80:80 nginx
run(创建并运行一个容器)
-d 放在后台
-p 端口映射
nginx docker镜像的名字

docker的镜像管理

配置镜像加速
这里使用阿里云的免费镜像加速服务,也可以使用其他如时速云、网易云等。
注册登录开通阿里云容器镜像服务
查看控制台,找到镜像加速器并复制自己的加速器地址
加入以下配置
# 填写自己的加速器地址
{
    "registry-mirrors": ["https://6kx4zyno.mirror.aliyuncs.com"]
}
​
docker仓库加速如下:
找到/etc/docker目录下的daemon.json文件,没有则创建/etc/docker目录后直接vi daemon.json编辑
vi /etc/docker/daemon.json
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}   
​或者阿里云docker加速
{ 
"registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com"]
 }
经过多次测试,发现还是阿里云的好用,所以强烈推荐这款


通知systemd重载此配置文件
systemctl daemon-reload
​
重启docker服务
systemctl restart docker
搜索镜像:
docker search
[root@docker01 ~]# docker search  centos
[root@docker01 ~]# docker search  nginx

官方docker镜像下载地址

hub.docker.com

image.png

image

拉取镜像

获取镜像
​   docker pull(push)

[root@docker01 ~]# docker pull busybox
[root@docker01 ~]# docker pull busybox:1.29

查看镜像

[root@docker01 ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              19485c79a9bb        9 hours ago         1.22MB
busybox             1.29                758ec7f3a1ee        8 months ago        1.15MB
nginx               latest              be1f31be9a87        11 months ago       109MB

删除镜像

[root@docker01 ~]# docker image rm busybox:1.29 
[root@docker01 ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              19485c79a9bb        9 hours ago         1.22MB
nginx               latest              be1f31be9a87        11 months ago       109MB

导出镜像

[root@docker01 ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              19485c79a9bb        9 hours ago         1.22MB
busybox             1.29                758ec7f3a1ee        8 months ago        1.15MB
nginx               latest              be1f31be9a87        11 months ago       109MB

[root@docker01 ~]# docker image save -o docker_busybox1.29.tar.gz busybox:1.29 

[root@docker01 ~]# ll
total 205572
-rw-------. 1 root root      1392 Apr 19 12:22 anaconda-ks.cfg
-rw-------  1 root root   1378816 Sep  5 12:08 docker_busybox1.29.tar.gz

导入镜像

[root@docker01 ~]# docker image  load -i docker_busybox1.29.tar.gz 
23bc2b70b201: Loading layer   1.37MB/1.37MB
Loaded image: busybox:1.29

[root@docker01 ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              19485c79a9bb        9 hours ago         1.22MB
busybox             1.29                758ec7f3a1ee        8 months ago        1.15MB
nginx               latest              be1f31be9a87        11 months ago       109MB

导入需要用到的镜像

导入镜像的下载链接: 提取码: db3x

[root@docker01 ~]# ll
-rw-r--r--  1 root root   5853184 Sep  5 12:15 docker_alpine.tar.gz
-rw-r--r--  1 root root   1424896 Sep  5 12:15 docker_busybox.tar.gz
-rw-r--r--  1 root root 202872320 Sep  5 12:16 docker_centos6.9.tar.gz
-rw-r--r--  1 root root  74210304 Sep  5 12:15 docker_k8s_dns.tar.gz

[root@docker01 ~]# for i in `find /root/* -type f -name "docker*"`;do docker image load -i $i;done

[root@docker01 ~]# docker image ls

image.png

docker的容器管理

*** docker run -d -p 80:80 nginx:latest  
run(创建并运行一个容器)
-d 放在后台
-p 端口映射
-v  源地址(宿主机):目标地址(容器)
​
nginx docker镜像的名字
​
docker run -it --name centos6 centos:6.9 /bin/bash
-it   分配交互式的终端interactive tty
--name 指定容器的名字
/bin/sh覆盖容器的初始命令
​
运行容器***
    docker run image_name   
​
    docker run ==== docker create  + docker start
启动容器
    docker start
停止容器
    docker stop CONTAINER_ID
杀死容器
    docker kill container_name
查看容器列表
    docker ps(-a -l  -q <--no-trunc 全部显示>)

​
进入正在运行的容器(目的,调试,排错)
*** docker exec  (会分配一个新的终端tty)
        docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
​
    docker exec -it  容器id或容器名字 /bin/bash(/bin/sh)   
    docker attach(使用同一个终端)  偷偷离开的快捷键ctrl+p,ctrl+q
        docker attach [OPTIONS] CONTAINER
    nsenter(安装yum install -y util-linux 弃用)
​
删除容器
    docker container rm <centos6>
批量删除容器
    docker rm -f `docker ps -a -q`

总结:docker容器内的第一个进程(初始命令)必须一直处于前台运行的状态(必须夯住),否则这个容器,就会处于退出状态!

业务在容器中运行:初始命令,夯住,启动服务

image

image.png

docker容器的网络访问(端口映射)

docker0:172.17.0.1   jumpserver:172.17.0.2   nginx:172.17.0.3

指定映射(docker 会自动添加一条iptables规则来实现端口映射)
​   -p hostPort:containerPort
​   -p ip:hostPort:containerPort  多个容器都想使用8080端口
​   -p ip::containerPort(随机端口)
​   -p hostPort:containerPort/udp
​   -p  10.0.0.100::53/udp   使用宿主机的10.0.0.100这个ip地址的随机端口的udp协议映射容器的udp53端口
​   -p 81:80 –p 443:443 可以指定多个-p

随机映射
​   docker run -P (随机端口)

通过iptables来实现的端口映射

docker的数据卷管理

/usr/share/nginx/html

-v  /opt/xiaoniao:/usr/share/nginx/html

持久化
数据卷(文件或目录)
​   -v 卷名:/data (第一次卷是空,会容器的数据复制到卷中,如果卷里面有数据,把卷数据的挂载到容器中)
​   -v src(宿主机的目录):dst(容器的目录)
数据卷容器
​   --volumes-from(跟某一个已经存在的容器挂载相同的卷)
​

小鸟飞飞飞_基础版练习

小游戏软件包下载链接 提取码: jyqy

第一种方法:
执行下面操作:小游戏的软件包下载后上传后将代码放到容器中

docker run -d -p 80:80 nginx:latest 
docker exec -it <ID_当前一台容器可tab键补全名字> /bin/bash
cd /opt/
mkdir xiaoniao
cd xiaoniao/
wget http://192.168.37.202/linux59/xiaoniaofeifei.zip
unzip xiaoniaofeifei.zip 
ls
cd ..
docker container cp xiaoniao <容器名字或_ID>:/usr/share/nginx/html

进入到nginx容器中查看站点目录:
docker exec -it <容器名字或_ID> /bin/bash
cd /usr/share/nginx/html/
ls xiaoniao/

image

第二种方法:
批量删除掉容器,用容器的数据复制方法把代码放到容器中:
最后接的是nginx的镜像,需提前上传好

docker container rm  -f  `docker ps -a -q`
docker run -d -p 80:80 -v /opt/xiaoniao:/usr/share/nginx/html nginx:latest

image.png

第三种方法
删除容器,没有根目录开始的就代表的是创建一个卷

[root@docker01 opt]# docker container rm -f `docker ps -a -q`
[root@docker01 opt]# docker run -d -p 80:80 -v xiaoniao:/usr/share/nginx/html nginx:latest
[root@docker01 opt]# docker volume ls   #卷的资源查看方式
DRIVER              VOLUME NAME
local               xiaoniao

查看卷的详细信息
[root@docker01 opt]# docker volume inspect xiaoniao 
[
    {
        "CreatedAt": "2019-09-05T20:11:26+08:00",   创建时间
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/xiaoniao/_data", 挂载点
        "Name": "xiaoniao",
        "Options": null,
        "Scope": "local"
    }
]
[root@docker01 opt]# cd /var/lib/docker/volumes/xiaoniao/_data
[root@docker01 _data]# ls
50x.html  index.html
[root@docker01 _data]# echo '123456ABCDEFG' >index.html 

image.png

如果卷里面有数据,把卷数据的挂载到容器中
再次清除容器,并创建新容器

[root@docker01 _data]# ls
50x.html  index.html
[root@docker01 _data]# docker container rm -f `docker ps -a -q`

内容没有改变,还是之前的数据

[图片上传中…(image.png-f31d91-1575533772550-0)]

修改标题名字

image

image

image

小鸟飞飞飞_加强版练习

基于nginx启动一个容器,监听80和81,访问80,出现nginx默认欢迎首页,访问81,出现小鸟。
-p 80:80 -p 81:81 -v xxx:xxx -v xxx:xxxx
基于nginx多端口的多站点。

第一种方法:宿主机上修改
#宿主机上添加一个nginx配置文件xiaoniao.conf,端口为81,站点目录为/opt
#记得打开nginx配置文件中的 include调用
#检查语法后重启nginx,查看80和81端口是否启动

[root@docker01 conf.d]# cat /etc/nginx/conf.d/xiaoniao.conf
server {
        listen       81;
        server_name  _;
        root         /opt;
        index index.html index.htm;
}
[root@docker01 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@docker01 conf.d]# systemctl restart nginx
[root@docker01 conf.d]# netstat -lntup|grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      19770/nginx: master 
tcp        0      0 0.0.0.0:81              0.0.0.0:*               LISTEN      19770/nginx: master 

#删除旧容器,杀死当前nginx进程
#创建新容器,将小鸟飞飞飞的nginx配置文件复制到容器的nginx配置文件下

[root@docker01 opt]# pkill -9 nginx 
[root@docker01 opt]# docker container rm -f `docker ps -a -q`   
[root@docker01 opt]# docker run -d -p 80:80 -p 81:81 -v /opt/xiaoniao.conf:/etc/nginx/conf.d/xiaoniao.conf -v /opt/xiaoniao:/opt nginx:latest

10.0.0.11:80

image

10.0.0.11:81

image.png

第二种方法:进入容器修改
#创建新容器,把代码复制到容器中后 进入容器

[root@docker01 opt]# docker container rm -f `docker ps -a -q`
[root@docker01 opt]# docker run -d -p 80:80 -p 81:81 -v /opt/xiaoniao:/opt nginx:latest
[root@docker01 opt]# docker exec  -it silly_napier /bin/bash

#在容器中生成xiaoniao.conf的nginx配置文件
echo 'server {
        listen       81;
        server_name  _;
        root         /opt;
        index index.html index.htm;
}' >/etc/nginx/conf.d/xiaoniao.conf

root@cde61c762776:/etc/nginx/conf.d# ls
default.conf  xiaoniao.conf

#退出容器在宿主机上重启nginx容器 浏览器访问查看是否成功
[root@docker01 opt]# docker restart silly_napier
silly_napier

image.png

image.png

第三种方法:在容器中使用apt-get工具下载vim工具

Debian系统优化源的链接

#删除旧容器,创建新的nginx容器,把代码复制到容器中,并进入容器

[root@docker01 opt]# docker container rm -f `docker ps -a -q`
[root@docker01 opt]# docker run -d -p 80:80 -p 81:81 -v /opt/xiaoniao:/opt nginx:latest
[root@docker01 opt]# docker exec -it magical_engelbart /bin/bash
root@70e72068d2d0:/# 

#查看容器的版本—Debian,和当前的源的命令

root@70e72068d2d0:/# cat /etc/os-release 
root@70e72068d2d0:/# cat /etc/apt/sources.list

#执行下面的命令,优化Debian的源
root@70e72068d2d0:/# echo 'deb http://mirrors.ustc.edu.cn/debian/ stretch main non-free contrib
deb http://mirrors.ustc.edu.cn/debian/ stretch-updates main non-free contrib
deb http://mirrors.ustc.edu.cn/debian/ stretch-backports main non-free contrib
deb-src http://mirrors.ustc.edu.cn/debian/ stretch main non-free contrib
deb-src http://mirrors.ustc.edu.cn/debian/ stretch-updates main non-free contrib
deb-src http://mirrors.ustc.edu.cn/debian/ stretch-backports main non-free contrib
deb http://mirrors.ustc.edu.cn/debian-security/ stretch/updates main non-free contrib
deb-src http://mirrors.ustc.edu.cn/debian-security/ stretch/updates main non-free contrib' >/etc/apt/sources.list

#更新缓存
root@70e72068d2d0:/# apt-get update

#使用apt-get下载 vim
root@70e72068d2d0:/# apt-get install vim -y

#添加xiaoniao.conf的配置文件
root@70e72068d2d0:/# vim /etc/nginx/conf.d/xiaoniao.conf
server {
        listen       81;
        server_name  _;
        root         /opt;
        index index.html index.htm;
}

#和之前的步骤相同,退出容器,在宿主机上重启nginx容器 
#浏览器访问查看是否成功
[root@docker01 opt]# docker restart silly_napier
silly_napier

image

image

apt-get 常用的命令

apt-cache search packagename 搜索包
apt-cache show packagename 获取包的相关信息,如说明、大小、版本等
apt-get install packagename 安装包
apt-get install packagename --reinstall 重新安装包
apt-get -f install 修复安装”-f = –fix-missing”
apt-get remove packagename 删除包
apt-get remove packagename --purge 删除包,包括删除配置文件等
apt-get update 更新源
apt-get upgrade 更新已安装的包
apt-get dist-upgrade 升级系统
apt-get dselect-upgrade 使用 dselect 升级
apt-cache depends packagename 了解使用依赖
apt-cache rdepends packagename 是查看该包被哪些包依赖
apt-get build-dep packagename 安装相关的编译环境
apt-get source packagename 下载该包的源代码
apt-get clean 清理无用的包
apt-get autoclean 清理无用的包
apt-get check 检查是否有损坏的依赖

Debian操作系统常用命令

资料链接

有些需要下载
apt-get install <软件名> -y

iproute     # ip addr
wget        # 下载软件
curl        # curl工具
ethtool     # 查看网卡状态

一、通用命令: 1\. date :print or set the system date and time
    2\. stty -a: 可以查看或者打印控制字符(Ctrl-C, Ctrl-D, Ctrl-Z 等)
    3\. passwd: print or set the system date and time (用 passwd -h 查看)
    4\. logout, login: 登录 shell 的登录和注销命令
    5\. pwd: print or set the system date and time
    6\. more, less, head tail: 显示或部分显示文件内容.
    7\. lp/lpstat/cancel, lpr/lpq/lprm: 打印文件.
    8\. 更改文件权限: chmod u+x...
    9\. 删除非空目录:rm -fr dir
    10.拷贝目录: cp -R dir

二、ubuntu 常用命令:
1\. dpkg: package manager for Debian
    * 安装: dpkg -i package
    * 卸载: dpkg -r package
    * 卸载并删除配置文件: dpkg -P |--purge package
    * 如果安装一个包时。说依赖某些库。可以先 #apt-get install somelib...
    * 查看软件包安装内容 :dpkg -L package
    * 另外 dpkg 还有 dselect 和 aptitude 两个 frontend.

2\. apt
    * 安装: apt-get install packs
    * apt-get update : 更新源
    * apt-get upgrade: 升级系统。
    * apt-get dist-upgrade: 智能升级。安装新软件包,删除废弃的软件包
    * apt-get -f install : -f == --fix broken 修复依赖
    * apt-get autoremove: 自动删除无用的软件
    * apt-get remove packages :删除软件
    * apt-get remove package --purge 删除包并清除配置文件
    * 清除所以删除包的残余配置文件: dpkg -l |grep ^rc|awk '{print $2}' |tr ["/n"] [" "]|sudo xargs dpkg -P
    * 安装软件时候包的临时存放目录 : /var/cache/apt/archives
    * 清除该目录: apt-get clean
    * 清除该目录的旧版本的软件缓存: apt-get autoclean
    * 查询软件 some 的依赖包: apt-cache depends some
    * 查询软件 some 被哪些包依赖: apt-get rdepends some
    * 搜索软件: apt-cache search name|regexp
    * 查看一个软件的编译依赖库: apt-cache showsrc packagename|grep Build-Depends
    * 下载软件的源代码 : apt-get source packagename (注: sources.list 中应该有 deb-src 源)
    * 安装软件包源码的同时, 安装其编译环境 :apt-get build-dep packagename (有 deb-src 源)
    * 如何将本地光盘加入安装源列表: apt-cdrom add

3\. 系统命令:
    * 查看内核版本: uname -a
    * 查看 ubuntu 版本: cat /etc/issue * 查看网卡状态 : ethtool eth0
    * 查看内存,cpu 的信息: cat /proc/meminfo ; cat /proc/cpuinfo
    (/proc 下面的有很多系统信息)
    * 打印文件系统空间使用情况: df -h
    * 查看硬盘分区情况: fdisk -l
    * 产看文件大小: du -h filename;
    * 查看目录大小: du -hs dirname ; du -h dirname 是查看目录下所有文件的大小
    * 查看内存的使用: free -m|-g|-k
    * 查看进程: ps -e 或 ps -aux -->显示用户
    * 杀掉进程: kill pid
    * 强制杀掉: killall -9 processname

4\. 网络相关:
    * 配置 ADSL: sudo pppoeconf
    * ADSL 手工拨号: sudo pon dsl-provider
    * 激活 ADSL : sudo /etc/ppp/pppoe_on_boot
    * 断开 ADSL: sudo poff 
    * 根据 IP 查网卡地址: arping IP 地址
    * 产看本地网络信息(包括 ip 等): ifconfig | ifconfig eth0
    * 查看路由信息: netstat -r
    * 关闭网卡: sudo ifconfig eth0 down
    * 启用网卡: sudo ifconfig eth0 up
    * 添加一个服务: sudo update-rc.d 服务名 defaults 99
    * 删除一个服务: sudo update-rc.d 服务名 remove
    * 临时重启一个服务: /etc/init.d/服务名 restart
    * 临时关闭一个服务: /etc/init.d/服务名 stop
    * 临时启动一个服务: /etc/init.d/服务名 start
    * 控制台下显示中文: sudo apt-get install zhcon
    * 查找某个文件: whereis filename 或 find 目录 -name 文件名
    *通过 ssh 传输文件
    scp -rp /path/filename username@remoteIP:/path #将本地文件拷贝到服务器上
    scp -rp username@remoteIP:/path/filename /path #将远程文件从服务器下载到本地

5\. 压缩:
    *解压缩 a.tar.gz
    #tar zxvf a.tar.gz
    *解压缩 a.tar.bz2 #tar jxvf a.tar.bz2
    *压缩 aaa bbb 目录为 xxx.tar.gz
    #tar zcvf xxx.tar.gz aaa bbb
    *压缩 aaa bbb 目录为 xxx.tar.bz2
    #tar jcvf xxx.tar.bz2 aaa bbb

6\. Nautilus:
    特殊 URI 地址
    * computer:/// - 全部挂载的设备和网络
    * network:/// - 浏览可用的网络
    * burn:/// - 一个刻录 CDs/DVDs 的数据虚拟目录
    * smb:/// - 可用的 windows/samba 网络资源
    * x-nautilus-desktop:/// - 桌面项目和图标
    * file:/// - 本地文件
    * trash:/// - 本地回收站目录
    * ftp:// - FTP 文件夹
    * ssh:// - SSH 文件夹
    * fonts:/// - 字体文件夹,可将字体文件拖到此处以完成安装
    * themes:/// - 系统主题文件夹
    * 显示隐藏文件: Ctrl+h
    * 显示地址栏: Ctrl+l
    * 查看已安装字体: 在 nautilus 的地址栏里输入”fonts:///“,就可以查看本机所有的 fonts`  

Vi Etc/network/interfaces · 在 Debian 及其衍生版本中,hostname 都可以通过一下方式修改。众所周知,Linux 的一切都
是存在于文件当中的,事实上 UNIX 是这种哲学的创立者。Debian 中 hostname 存在于以下文
件。
/etc/hostname

10.挑战-搭建Ghost博客系统

image

资料链接
https://iiong.com/gost-blog-install-notes/
https://blog.csdn.net/qq_35974759/article/details/84858358

手动将容器保存为镜像

docker commit 容器id或者容器的名字   新的镜像名字[:版本号可选]

1):基于容器制作镜像
docker run -it centos:6.9 
######
yum install httpd
yum install openssh-server
/etc/init.d/sshd start

vi /init.sh
#!/bin/bash
/etc/init.d/httpd start
/usr/sbin/sshd -D

chmod +x /init.sh

2)将容器提交为镜像
docker commit oldboy centos6-ssh-httpd:v1

3)测试镜像功能是否可用

手动制作的镜像,传输时间长
镜像初始命令

制作一个kodexplorer网盘docker镜像。nginx + php-fpm(httpd + php)

手动制作容器步骤

手动创建一个centos6的镜像并创建一台容器

#创建一台基础容器,81端口映射到80端口 下载nginx

docker run -it -p 81:80 centos:6.9 /bin/bash
ifconfig

#做端口映射,在容器中下载nginx

echo "192.168.37.202  mirrors.aliyun.com" >>/etc/hosts
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
yum install nginx -y

在宿主机上手动制作镜像
使用创建的镜像镜像创建容器

#查看创建的centos6.9基础容器的ID
#创建镜像 centos6.9_nginx v1版本
#删除当前所有容器
#查看宿主机中的镜像,是否有刚刚创建的镜像
#利用新建的镜像创建容器,将82端口映射到80端口

docker ps -a
docker container commit 84265c434784 centos6.9_nginx:v1
docker container rm -f `docker ps -a -q`
docker image ls
docker run -d -p 82:80 centos6.9_nginx:v1 nginx -g 'daemon off;'

访问10.0.0.11:82是否成功

image

容器搭建_扫雷小游戏

tomcat环境

思路

1:启动centos6 基础容器
yum  install  tomcat

2:在容器中书写脚本文件
vi   /init.sh
#!/bin/bash
service  tomcat start
tail   -f   /var/log/tomcat/catalina.out

3:把容器提交为镜像
docker  commit   4a8871d37633   centos6.9_tomcat7:v1

4:启动容器
docker  run  -d   -p 8081:8080    -v    /opt/saolei:/var/lib/tomcat/webapps/ROOT                      centos6.9_tomcat7:v1   /bin/bash    /init.sh

image

具体操作步骤

扫雷软件包下载链接_提取码: 29tu

生产环境中,一般把源代码直接封装到镜像中,一运行容器就可以用,就不用 < -v > 挂载了

#启动centos6基础容器,下载tomcat
docker run -it -p 80:80 centos:6.9 /bin/bash

echo "192.168.37.202  mirrors.aliyun.com" >>/etc/hosts
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
yum install tomcat -y

在容器中书写脚本
vi /init.sh
#!/bin/bash
service tomcat start
tail -f /var/log/tomcat/catalina.out

#把容器提交为镜像
docker commit <容器ID> centos6.9_tomcat7:v1

#将扫雷代码放到/opt目录下
[root@docker01 ~]# ll /opt/saolei/
total 12
drwxr-xr-x 2 root root  161 Dec  3  2009 imgs
-rw-r--r-- 1 root root 9250 Dec  1  2009 saolei.jsp

#启动容器,为了夯住,后面要执行之前写的脚本文件
#如果宿主机有tomcat的环境记得修改端口映射或把宿主机的环境杀掉
pkill -9 java
docker run -d -p 8080:8080 -v /opt/saolei:/var/lib/tomcat/webapps/ROOT centos6.9_tomcat7:v1 /bin/bash /init.sh

#浏览器访问就可以玩了

image

容器搭建_可道云

可道云的站点包下载链接_提取码: svg2

#删除索引容器
docker container rm -f `docker ps -a -q`

================================================

#新建一个基础容器
docker run -it -p 80:80 centos6.9_nginx:v1 /bin/bash

#hosts劫持
echo "192.168.37.202  mirrors.aliyun.com" >>/etc/hosts
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

#安装php-fpm
yum install -y php-fpm php-gd php-mbstring

#在容器中修改php配置文件
[root@de6c450c9fe9 /]# grep  'nginx' /etc/php-fpm.d/www.conf
user = nginx
group = nginx

#在容器中修改nginx配置文件,设置站点目录为 /code
[root@de6c450c9fe9 /]# cat /etc/nginx/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   /code;
            index  index.php index.html index.htm;
        }
        location ~ \.php$ {
            root           /code;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /code$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
}

mkdir /code

#在容器中下载wget和unzip命令用来下载可道云的文件
#可道云的站点包在上面提供的下载路径可以下载使用
#解压到站点目录下后,修改站点目录的权限为nginx
yum install -y  wget unzip
wget http://192.168.37.202/linux59/kodexplorer4.40.zip
mv kodexplorer4.40.zip  code/
cd code/
unzip kodexplorer4.40.zip 
chown -R nginx.nginx .

#启动php和nginx
service php-fpm restart
service nginx restart

浏览器访问查看

image

#把可道云做一个镜像
docker commit <容器ID> kod:v1

#新建一个可道云的容器
docker run -d -p 81:80 kod:v1 service php-fpm nginx start

#登录方式保证历史命令存在
docker start <容器ID>
docker attach <容器ID>

#保证容器夯住,在容器中书写脚本
vi /init.sh
#!/bin/bash
service php-fpm start
nginx -g 'daemon off;'

#将php-fpm和nginx关闭掉
service php-fpm stop 
service nginx stop 

#测试脚本是否可用
sh /init.sh

#再次做镜像v2
docker commit <容器ID> kod:v2

#利用镜像v2运行一个新的容器
docker run -d -p 81:80 kod:v2 /bin/bash /init.sh

image.png

完成

容器搭建_phpwind论坛

phpwind论坛站点包下载链接_提取码: fw6p

#新建一个基础容器,80端口映射,80端口,
#与上一个项目的可道云的81端口不要冲突
docker run -it -p 80:80 centos6.9_nginx:v1 /bin/bash

#在容器中执行,hosts本地劫持
echo "192.168.37.202  mirrors.aliyun.com" >>/etc/hosts
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

#下载php环境和需要用的的命令
yum install -y wget unzip php-fpm php-gd php-mbstring php-mysql vim 

#拉取phpwind论坛的站点包,上面已有下载链接
wget http://192.168.37.202/linux59/phpwind_UTF8_8.7.1.zip

#创建站点目录,解压后并修改权限为nginx
mkdir /code
mv phpwind_UTF8_8.7.1.zip code/
cd /code
unzip phpwind_UTF8_8.7.1.zip
chown -R nginx.nginx .

#修改php-fpm配置文件
[root@2fc2234b814b code]# grep  'nginx' /etc/php-fpm.d/www.conf
user = nginx
group = nginx

#在容器中修改nginx配置文件,设置站点目录为 /code/upload
[root@de6c450c9fe9 /]# cat /etc/nginx/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   /code/upload;
            index  index.php index.html index.htm;
        }
        location ~ \.php$ {
            root           /code/upload;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /code/upload$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
}

#启动php-fpm和nginx服务
service php-fpm restart
service nginx restart

#安装数据库并启动
yum install -y mysql-libs mysql-server
service mysqld restart

#进入数据库创库,删除空表
#为数据库创建密码
[root@2fc2234b814b code]# mysqladmin -uroot -p password 123456
[root@2fc2234b814b code]# mysql -uroot -p123456
#删除空表
mysql> select user,host from mysql.user;
mysql>  drop user ''@'2fc2234b814b';
mysql>  drop user ''@'localhost';
mysql> flush privileges;

#创建phpwind库
mysql> create database phpwind charset utf8;
mysql> show databases;

#调整时区
[root@2fc2234b814b code]# /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[root@2fc2234b814b code]# date
Fri Sep  6 15:26:33 CST 2019

#重启服务
service php-fpm restart
service nginx restart
service mysqld restart

浏览器访问查看

image.png

image

image

image

image

image.png


dockerfile自动构建docker镜像

image

类似ansible剧本,大小几kb
手动做镜像:大小几百M+
dockerfile 支持自定义容器的初始命令
dockerfile主要组成部分:
​ 基础镜像信息 FROM centos:6.9
​ 制作镜像操作指令 RUN yum install openssh-server -y
​ 容器启动时执行初始命令 CMD ["/bin/bash"]

dockerfile常用指令:
FROM  这个镜像的妈妈是谁?(指定基础镜像)
MAINTAINER 告诉别人,谁负责养它?(指定维护者信息,可以没有)
LABLE      描述,标签
RUN 你想让它干啥(在命令前面加上RUN即可)
ADD 给它点创业资金(会自动解压tar)  制作docker基础的系统镜像
WORKDIR 我是cd,今天刚化了妆(设置当前工作目录)
VOLUME 给它一个存放行李的地方(设置卷,挂载主机目录)
EXPOSE 它要打开的门是啥(指定对外的端口)(-P 随机端口)
CMD 奔跑吧,兄弟!(指定容器启动后的要干的事情)(容易被替换)
dockerfile其他指令: 
COPY 复制文件(不会解压)rootfs.tar.gz
ENV  环境变量
ENTRYPOINT  容器启动后执行的命令(无法被替换,启容器的时候指定的命令,会被当成参数)

测试——FROM & RUN


#手动制作一次docker镜像(收集命令)

#编写dockerfile文件
[root@docker01 nginx]# mkdir -p /opt/dockerfile/nginx
[root@docker01 nginx]# cd /opt/dockerfile/nginx
[root@docker01 nginx]# vim dockerfile
FROM centos:6.9
RUN  curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
RUN  curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
RUN  yum install nginx -y
CMD  ["nginx","-g","daemon off;"]

#docker build自动构建docker镜像
[root@docker01 nginx]# docker image build -t centos6.9_nginx:v2 --network=host /opt/dockerfile/nginx
.....
Successfully built 05342d047d21
Successfully tagged centos6.9_nginx:v2

#测试镜像可不可以使用
docker run -d -p 88:80 centos6.9_nginx:v2

image.png

FROM centos:6.9 加载镜像
RUN  启动一个临时容器, curl产生文件变化。保留文件变化,提交为临时镜像,删除临时容器
RUN  启动一个临时容器,yum install,提交为临时镜像,删除临时容器

dockerfile RUN ==  docker run 

加速的一种方法就是把执行的命令放到一行 && \

[root@docker01 nginx]# vim dockerfile 
FROM centos:6.9
RUN  curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo && \
 curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo && \
 yum install nginx php -y
CMD  ["nginx","-g","daemon off;"]

测试——ADD

#创建目录
cd dockerfile/
mkdir saolei
[root@docker01 saolei]# pwd
/opt/dockerfile/saolei

#添加自动创建镜像的配置文件
[root@docker01 saolei]# vim dockerfile
FROM  centos:6.9
RUN  curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
RUN  curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
RUN  yum  install  tomcat  -y

RUN  cd /var/lib/tomcat/webapps/ && \
curl -o saolei.tar.gz  http://192.168.37.202/linux59/saolei.tar.gz && \
tar xf saolei.tar.gz && \
mv saolei ROOT

ADD  init.sh /init.sh
CMD  ["/bin/bash","/init.sh"]

#添加脚本文件
[root@docker01 saolei]# vim init.sh
#!/bin/bash
service  tomcat start
tail   -f   /var/log/tomcat/catalina.out

#docker build自动构建docker镜像
docker build -t centos6.9_tomcat7:v2  --network=host .

#测试镜像可不可以使用
docker run -d -p 8080:8080 centos6.9_tomcat7:v2
docker ps -a -l

浏览器访问10.0.0.11:8080

image

测试——EXPOSE

#将站点包下载到saolei/下
[root@docker01 saolei]# curl -o saolei.tar.gz  http://192.168.37.202/linux59/saolei.tar.gz
[root@docker01 saolei]# vim dockerfile 
FROM  centos:6.9
RUN  curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
RUN  curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
RUN  yum  install  tomcat  -y

RUN  cd /var/lib/tomcat/webapps/ 
ADD  saolei.tar.gz .
RUN  mv saolei ROOT

ADD  init.sh /init.sh

EXPOSE 8080 

CMD  ["/bin/bash","/init.sh"]

#docker build自动构建docker镜像
[root@docker01 saolei]# docker build -t centos6.9_tomcat7:v5  --network=host .

docker常用指令

image

docker volume ls

docker run -d -p 88:80 --volumes-from 0017aae5b068  kod:v6

docker镜像的分层(kvm 链接克隆,写时复制的特性)

image

镜像分层的好处:复用,节省磁盘空间,相同的内容只需加载一份到内存。
修改dockerfile之后,再次构建速度快

dockerfile 优化:

1:尽可能选择体积小linux,alpine

2:尽可能合并RUN指令,清理无用的文件(yum缓存,源码包)

3:修改dockerfile,把变化的内容尽可能放在dockerfile结尾

4: 使用.dockerignore,减少不必要的文件ADD .   /html

image

image

image

image

image

容器间的互联(–link 是单方向的!)

hosts解析

image


[root@docker01 kod]# docker run -d  --name nginx centos6.9_nginx:v1 nginx -g 'daemon off;'
[root@docker01 kod]# docker exec -it nginx /bin/bash
[root@fef3cf194be8 /]# hostname -I
172.17.0.2 
[root@docker01 kod]# docker run -it --link nginx:web centos6.9_nginx:v1 /bin/bash
[root@969c228864f2 /]# ping web
PING web (172.17.0.2) 56(84) bytes of data.
64 bytes from web (172.17.0.2): icmp_seq=1 ttl=64 time=0.118 ms
64 bytes from web (172.17.0.2): icmp_seq=2 ttl=64 time=0.120 ms
^C
--- web ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1288ms
rtt min/avg/max/mdev = 0.118/0.119/0.120/0.001 ms
[root@969c228864f2 /]# cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2  web fef3cf194be8 nginx

docker部署zabbix监控

上传需要的tar包

image

#上传后校验md5值
ls *.tar.gz|xargs md5sum

for n in `ls *.tar.gz`;do docker load -i $n  ;done

docker run --name mysql-server -it \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      -d mysql:5.7 \
      --character-set-server=utf8 --collation-server=utf8_bin

docker run --name zabbix-java-gateway -t \
      -d zabbix/zabbix-java-gateway:latest

docker run --name zabbix-server-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
      --link mysql-server:mysql \
      --link zabbix-java-gateway:zabbix-java-gateway \
      -p 10051:10051 \
      -d zabbix/zabbix-server-mysql:latest

docker run --name zabbix-web-nginx-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      --link mysql-server:mysql \
      --link zabbix-server-mysql:zabbix-server \
      -p 80:80 \
      -d zabbix/zabbix-web-nginx-mysql:latest

#zabbix的默认监控密码
Admin:zabbix

image.png

监控服务

zabbix-agent客户端软件包下载链接_提取码: y7ri

开启另外一台docker宿主机 10.0.0.12

image

image

image

上传zabbix-agent的软件包:
[root@docker02 ~]# hostname -I
10.0.0.12 172.17.0.1 
[root@docker02 ~]# ls zabbix-agent-3.2.0-1.el7.x86_64.rpm 
zabbix-agent-3.2.0-1.el7.x86_64.rpm

安装zabbix-agent客户端:
[root@docker02 ~]# rpm -ivh zabbix-agent-3.2.0-1.el7.x86_64.rpm
warning: zabbix-agent-3.2.0-1.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID a14fe591: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:zabbix-agent-3.2.0-1.el7         ################################# [100%]

修改zabbix-agent.conf配置文件中指定的服务端IP:
[root@docker02 ~]# egrep '^Server' /etc/zabbix/zabbix_agentd.conf 
Server=10.0.0.11
ServerActive=127.0.0.1

重启zabbix-agent服务
[root@docker02 ~]# systemctl restart zabbix-agent.service 

在10.0.0.11 上重启docker的zabbix服务端容器,数据能够加速被监控上
[root@docker01 ~]# docker restart zabbix-server-mysql 
zabbix-server-mysql

image

docker registry(私有仓库)

强哥的文档—docker私有仓库registry的使用

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

上传镜像到私有仓库:
a:给镜像打标签
docker  tag centos6-sshd:v3 10.0.0.11:5000/centos6-sshd:v3
b:上传镜像
docker push 10.0.0.11:5000/centos6-sshd:v3

如果遇到报错:
The push refers to repository [10.0.0.11:5000/centos6.9_ssh]
Get https://10.0.0.11:5000/v2/: http: server gave HTTP response to HTTPS client

解决方法:
vim  /etc/docker/daemon.json
{
  "insecure-registries": ["10.0.0.11:5000"]
}
systemctl restart docker

普通的registry

registry软件包下载链接_提取码: fy19

在10.0.0.11上导入私有仓库的配置文件
[root@docker01 opt]# docker load -i registry.tar.gz 
[root@docker01 opt]# docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry  registry
a958c7b6817dc8d38ba175c12e8a2452668a9b68b1fe9846e46004ee26646608

#上传镜像到私有仓库
[root@docker02 ~]# docker pull daocloud.io/huangzhichong/alpine-cn:latest
[root@docker02 ~]# docker images
REPOSITORY                            TAG                 IMAGE ID            CREATED             SIZE
nginx                                 latest              be1f31be9a87        11 months ago       109MB
daocloud.io/huangzhichong/alpine-cn   latest              e8289dcc1d4b        2 years ago         3.98MB

给镜像打标签:
[root@docker02 ~]# docker tag e8289dcc1d4b 10.0.0.11:5000/alpine:latest
[root@docker02 ~]# docker images
REPOSITORY                            TAG                 IMAGE ID            CREATED             SIZE
nginx                                 latest              be1f31be9a87        11 months ago       109MB
10.0.0.11:5000/alpine                 latest              e8289dcc1d4b        2 years ago         3.98MB
daocloud.io/huangzhichong/alpine-cn   latest              e8289dcc1d4b        2 years ago         3.98MB

上传镜像:
[root@docker02 ~]# docker push 10.0.0.11:5000/alpine:latest 
The push refers to repository [10.0.0.11:5000/alpine]
Get https://10.0.0.11:5000/v2/: dial tcp 10.0.0.11:5000: connect: connection refused

第一次报错后添加下面的配置:
[root@docker02 ~]# vim  /etc/docker/daemon.json
{
  "insecure-registries": ["10.0.0.11:5000"]
}

重启docker
[root@docker02 ~]# systemctl restart docker

再次上传镜像成功
[root@docker02 ~]# docker push 10.0.0.11:5000/alpine:latest 
The push refers to repository [10.0.0.11:5000/alpine]
78cd8c87ab42: Pushed 
60ab55d3379d: Pushed 
latest: digest: sha256:d438c876bc7cbfe7732ca1c9a689cc3c24e15f2492ba6270d55f0a8984f96078 size: 735

#再上传一个nginx的镜像
打标签
[root@docker02 ~]# docker tag be1f31be9a87 10.0.0.11:5000/nginx:latest

上传镜像
[root@docker02 ~]# docker push 10.0.0.11:5000/nginx
The push refers to repository [10.0.0.11:5000/nginx]
92b86b4e7957: Pushed 
94ad191a291b: Pushed 
8b15606a9e3e: Pushed 
latest: digest: sha256:204a9a8e65061b10b92ad361dd6f406248404fe60efd5d6a8f2595f18bb37aad size: 948

带basic认证的registry

yum install httpd-tools -y
mkdir /opt/registry-var/auth/ -p
htpasswd  -Bbn oldboy 123456  >> /opt/registry-var/auth/htpasswd

docker run -d -p 5000:5000 --restart=always -v /opt/registry-var/auth/:/auth/   -v /opt/myregistry:/var/lib/registry -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e  "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry 

#账号密码为oldboy 123456

[root@docker02 ~]# docker login 10.0.0.11:5000
Username: oldboy
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[root@docker02 ~]# cat /root/.docker/config.json 
{
    "auths": {
        "10.0.0.11:5000": {
            "auth": "b2xkYm95OjEyMzQ1Ng=="
        }
    },
    "HttpHeaders": {
        "User-Agent": "Docker-Client/19.03.1 (linux)"
    }
}[root@docker02 ~]# 

删除仓库的镜像

docker-compose(单机版的容器编排工具)

ansible剧本

yum install -y docker-compose(需要epel源)

cd my_wordpress/
vi docker-compose.yml

version: '3'
​
services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress
​
   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     volumes:
       - web_data:/var/www/html
     ports:
       - "80:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:
    web_data:

启动

docker-compose up

后台启动

docker-compose up -d

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

方法一:docker run  --restart=always

方法二:"live-restore": true
docker server配置文件/etc/docker/daemon.json参考
{
 "registry-mirrors": ["http://b7a9017d.m.daocloud.io"],
 "insecure-registries":["10.0.0.11:5000"],
 "live-restore": true
}

#harbor 企业级容器 docker-compose down


Docker Machine安装docker服务

Docker Machine 二进制  10.0.0.11
10.0.0.12 免密码登陆  从docker的官网下载二进制的包,去安装docker
10.0.0.13 免密码登陆

ansible:
shell


Docker网络类型(插件形式)

Docker:网络模式详解
Docker网络模式测试

image

查看容器的详细信息(可以查看网络类型Networks)

docker container inspect 容器ID

[root@controller ~]#   docker network ls
NAME                DRIVER              SCOPE
bridge              bridge              local
host                host                local
none                null                local

None:不为容器配置任何网络功能,–net=none
Container:与另一个运行中的容器共享Network Namespace,–net=container:containerID(K8S)
Host:与宿主机共享Network Namespace,–network=host 性能最高
Bridge:Docker设计的NAT网络模型 默认类型
[root@docker01 ~]# docker run --help|grep -i '\-n'
      --name string                    Assign a name to the container
      --network network                Connect a container to a network
      --network-alias list             Add network-scoped alias for the
      --no-healthcheck                 Disable any container-specified

host(主机)

与宿主机共用一个网络 --network=host`

image

[root@docker01 ~]# docker run --network=host -d centos6.9_nginx:v2 
47fcdc6d02a2fcaf96f94c01dd8c4e30f8d18f4554ecd041a5b92291dee3e72e
[root@docker01 ~]# docker inspect 47fcdc6d02a2  |grep -i network
            "NetworkMode": "host",
        "NetworkSettings": {
            "Networks": {
                    "NetworkID": "5755f7d4fc1e6e3b78efa629294ddc7f86a93a7d7863e
[root@docker01 /]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      1/nginx             
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      -                   
tcp        0      0 :::5000                     :::*                        LISTEN      -                   
tcp        0      0 :::80                       :::*                        LISTEN      1/nginx             
tcp        0      0 :::22                       :::*                        LISTEN      -                   
udp        0      0 127.0.0.1:323               0.0.0.0:*                               -                   
udp        0      0 ::1:323                     :::*                                    -     

image.png

bridge(桥接式网络)(默认)

image

启动容器时,首先会在主机上创建一个docker0的虚拟网桥,相当于交换机,同时自动分配一对网卡设备,一半在容器(eth0),一半在宿主机,并且还关联到了docker0,从而进行连接。 每创建一个容器启动时自动分配地址以后会生成iptables规则,iptables -t nat -vnL 查看postrouting ,从任何接口进来,只要不从docker0跳出去,源地址任何网络地址,无论到达任何主机,都要做地址伪装,自动选择主机物理源地址

image

[root@docker01 ~]# yum install bridge-utils -y
[root@docker01 ~]# docker run --network=bridge -d centos6.9_nginx:v2
[root@docker01 ~]# brctl show
bridge name bridge id       STP enabled interfaces
docker0     8000.0242dffbd98d   no      vetha7e18ee
[root@docker01 ~]# brctl show
bridge name bridge id       STP enabled interfaces
docker0     8000.0242dffbd98d   no      veth4e42c2f
                            vetha30a6de

Container(K8S会常用)

与另一个运行得容器共用一个网络Network Namespace --network=container:容器ID

默认先起一个容器:
docker run -d phpwind:v1
随便启一个容器共用phpwind:v1的网络
docker run -it --network container:2735c9b78546 nginx
这时nginx容器和phpwind的ip都是相同的 ,同样谁先占用80端口就是谁的

##查看网络类型
docker inspect nginx容器ID |grep -i network
  NetworkMode

none (空)

不为容器配置任何网络功能 --network=none 不使用任何网络类型

docker run --network=none -d phpwind:v1 /bin/bash

没有网络适合联系使用,只有基础命令


Docker跨主机容器之间的通信macvlan

image

默认一个物理网卡,只有一个物理mac地址,虚拟多个mac地址

##创建macvlan网络
docker network create --driver macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1
##设置eth0的网卡为混杂模式
ip link set eth1 promisc on
##创建使用macvlan网络的容器
docker run -it --network macvlan_1 --ip=10.0.0.200 busybox

练习1:docker跨主机容器间的通信flannel

[root@docker01 ~]# docker network create --driver macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1
[root@docker01 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
e088d87e361f        bridge              bridge              local
e7638e062d74        macvlan_1           macvlan             local
[root@docker01 ~]# docker run -it --network macvlan_1 alpine:latest 
/ # 
/ # ifconfig 
eth0      Link encap:Ethernet  HWaddr 02:42:0A:00:00:01  
          inet addr:10.0.0.1  Bcast:10.0.0.255  Mask:255.255.255.0

[root@docker01 ~]# docker run -it --network macvlan_1 --ip 10.0.0.100 alpine:latest 
/ # 
/ # ifconfig 
eth0      Link encap:Ethernet  HWaddr 02:42:0A:00:00:64  
          inet addr:10.0.0.100  Bcast:10.0.0.255  Mask:255.255.255.0

[root@docker01 ~]# docker stats --no-stream 
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
e1b597321916        laughing_nobel      0.00%               192KiB / 1.934GiB   0.01%               0B / 0B             0B / 0B             1
af48e50366d1        confident_hypatia   0.00%               188KiB / 1.934GiB   0.01%               0B / 0B             0B / 0B  


Dcoker跨主机容器通信之overlay

image.png

准备 overlay 网络实验环境

docker_progrium_consul.tar.gz镜像包下载链接_提取码: uk8p

设置容器的主机名

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

docker01上:

[root@docker01 ~]# wget http://192.168.37.202/linux59/docker_progrium_consul.tar.gz
[root@docker01 ~]# docker load -i docker_progrium_consul.tar.gz
[root@docker01 ~]# vim  /etc/docker/daemon.json
{
  "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
  "cluster-store": "consul://10.0.0.11:8500",
  "cluster-advertise": "10.0.0.11:2376"
}

[root@docker01 ~]# vim /usr/lib/systemd/system/docker.service
...
ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock

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

docker02上:

[root@docker02 ~]# wget http://192.168.37.202/linux59/docker_progrium_consul.tar.gz
[root@docker02 ~]# docker load -i docker_progrium_consul.tar.gz
[root@docker02 ~]# vim  /etc/docker/daemon.json
{
  "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
  "cluster-store": "consul://10.0.0.11:8500",
  "cluster-advertise": "10.0.0.12:2376"
}

[root@docker02 ~]# vim /usr/lib/systemd/system/docker.service
...
ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock

docker01上创建容器:

[root@docker01 ~]# docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap

浏览器访问10.0.0.11:8500

image.png

创建overlay网络
[root@docker01 ~]# docker network create -d overlay --subnet 172.16.2.0/24 --gateway 172.16.2.254  ol1
[root@docker01 ~]# docker network ls
b2de7ebcc1f6        ol1                 overlay             global

#docker02上查看
[root@docker02 ~]# docker network ls
b2de7ebcc1f6        ol1                 overlay             global


启动容器测试
[root@docker01 ~]# docker run -it --network ol1 --name test01  busybox:latest

[root@docker02 ~]# docker run -it --network ol1 --name test02  busybox:latest 
/ # ifconfig 
eth0      Link encap:Ethernet  HWaddr 02:42:AC:10:02:02  
          inet addr:172.16.2.2  Bcast:172.16.2.255  Mask:255.255.255.0
/ # ping 172.16.2.1
64 bytes from 172.16.2.1: seq=0 ttl=64 time=1.665 ms
64 bytes from 172.16.2.1: seq=1 ttl=64 time=0.399 ms

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

搭建zabbix监控测试环境

docker01上:

# 添加--network ol1的网络环境
上面已添加

docker run --name mysql-server -t --network ol1\
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      -d mysql:5.7 \
      --character-set-server=utf8 --collation-server=utf8_bin

docker run --name zabbix-java-gateway -t --network ol1\
      -d zabbix/zabbix-java-gateway:latest

docker run --name zabbix-server-mysql -t --network ol1\
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
      --link mysql-server:mysql \
      --link zabbix-java-gateway:zabbix-java-gateway \
      -p 10051:10051 \
      -d zabbix/zabbix-server-mysql:latest

docker02上:

#上传zabbix-web-nginx-mysql.tar.gz的镜像并导入镜像
[root@docker02 ~]# ls zabbix-web-nginx-mysql.tar.gz 
zabbix-web-nginx-mysql.tar.gz
[root@docker02 ~]# docker load  -i zabbix-web-nginx-mysql.tar.gz

#在docker02上添加zabbix-web-nginx-mysql容器
docker run --name zabbix-web-nginx-mysql -t --network ol1\
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      --link mysql-server:mysql \
      --link zabbix-server-mysql:zabbix-server \
      -p 80:80 \
      -d zabbix/zabbix-web-nginx-mysql:latest

浏览器访问10.0.0.12

image.png

image.png

官方下载模板_cadvisor

官方下载模板_InfluxDB Docker

导入模板

image

image

image

image

另外一种

image

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值