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 images ---查看拥有的镜像
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 container ls -a ---查看所有容器的状态(不加-a查看运行中的容器)
docker start 容器名字或ID ---启动容器
docker stop 容器名字或ID ---停止容器
docker kill 容器名字或ID ---杀掉容器
docker container ls -a -l ---只显示最近的一个容器
docker container rm ---删除一个容器
docker stop $(docker ps -a -q) ---批量删除未运行的容器
docker ps -a ---显示所有容器(包括未运行的)
docker ps -a -q ---只显示所有容器的ID
docker exec -it 容器名字或ID /bin/bash ---进入一个容器
docker commit 容器ID 新镜像名称 ---手动制作容器
docker image build -t centos6.9_nginx:v2 /opt/dockerfile/nginx ---自动构建镜像命令(在当前目录下可用 . 表示)
-t ---给镜像创建名称
docker run -it --workdir /tmp centos6.9 ---指定容器工作目录
docker inspect ---查看(容器、镜像、卷)属性
什么是容器?
容器就是在隔离的环境运行的一个进程,如果进程停止,容器就会销毁。隔离的环境拥有自己的系统文件,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/
练习1:使用chroot监狱限制SSH用户访问指定目录和使用指定命令(cp,ls)
https://linux.cn/article-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
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
导入需要用到的镜像
[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(跟某一个已经存在的容器挂载相同的卷)
小鸟飞飞飞_基础版练习
第一种方法:
执行下面操作:小游戏的软件包下载后上传后将代码放到容器中
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 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
image10.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工具
#删除旧容器,创建新的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
具体操作步骤
生产环境中,一般把源代码直接封装到镜像中,一运行容器就可以用,就不用 < -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
容器搭建_可道云
#删除索引容器
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论坛
#新建一个基础容器,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 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
在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网络类型(插件形式)
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.pngdocker_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
导入模板
image image image image另外一种
image
网友评论