什么是docker?
什么是容器?
docker用在什么场景?
版本:
系统条件
安装docker
[root@master ~]# yum localinstall docker-ce-18.06.3.ce-3.el7.x86_64.rpm
创建docker配置文件
[root@master ~]# mkdir /etc/docker
[root@master ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://mzxx8xy8.mirror.aliyuncs.com"]
}
启动docker
[root@master ~]# systemctl start docker
[root@master ~]# docker info
镜像:
使用docker
拉取镜像
检查镜像
启动容器
简单使用docker
1)拉取nginx镜像文件
[root@master ~]# docker search nginx
[root@master ~]# docker pull nginx
2)拉取centos镜像文件
3)拉取busybox镜像
[root@master ~]# docker pull busybox
3)查看镜像
[root@master ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 6678c7c2e56c 3 weeks ago 127MB
启动容器的命令格式:
启动busybox容器
[root@master ~]# docker run --name mybox1 -it busybox
在容器中,启动一个web服务
# mkdir /data/html
# echo "test page">/data/html/index.html
# httpd -f -h /data/html
在宿主机中执行ps,查看进容器
[root@master ~]# docker ps
查看容器的ip信息
[root@master ~]# docker inspect mybox | grep "Address"
通过ip访问容器的apache测试页
[root@master ~]# curl x.x.x.x
作业:
1) 准备一台Centos7的服务器,检测网络正常
[root@master ~]# ping www.qq.com
2) 检查服务器docker运行是否正常,如没有请安装
安装docker
启动docker
[root@master ~]# systemctl start docker
[root@master ~]# docker info
3) 请检查本机是否有centos镜像,如没有请下载centos镜像
[root@master ~]# docker image ls
[root@master ~]# docker pull centos:7
4) 请以centos镜像为基础镜像,创建Nginx镜像
第一步:启动一个nginx容器,让这个容器工作在后台
[root@master ~]# docker run --rm --name demo1 -d centos:7 /usr/sbin/init
[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a3a327f88ee3 centos:7 "/usr/sbin/init" 14 seconds ago Up 13 seconds demo1
第二步:进入容器
[root@master ~]# docker exec -it demo1 /bin/bash
[root@a3a327f88ee3 /]#
第三步:在容器中编译安装nginx
[root@a3a327f88ee3 /]# yum install make gcc gcc-c++ pcre-devel ncurses-devel wget zlib-devel -y
[root@a3a327f88ee3 /]# wget http://nginx.org/download/nginx-1.16.1.tar.gz
[root@a3a327f88ee3 /]# tar xvf nginx-1.16.1.tar.gz
[root@a3a327f88ee3 /]# cd nginx-1.16.1
[root@a3a327f88ee3 nginx-1.16.1]# ./configure --prefix=/usr/local/nginx && make && make install
第四步:在容器中修改nginx配置文件,让nginx工作在前台
[root@a3a327f88ee3 ~]# vi /usr/local/nginx/conf/nginx.conf
添加一行
daemon off;
第五步:退出容器,在宿主机上将demo1这个容器做成镜像
[root@master ~]# docker commit demo1 nginx
6) 请查看本地镜像列表,查看镜像创建是否成功
[root@master ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 82c8be6ecd2e 5 seconds ago 411MB
第一步:修改镜像名称
[root@master ~]# docker tag nginx:latest new-nginx:1.0
[root@master ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
new-nginx 1.0 82c8be6ecd2e 3 minutes ago 411MB
nginx latest 82c8be6ecd2e 3 minutes ago 411MB
第二步:启动容器
[root@master ~]# docker run --name wg-nginx -d --rm -p 8000:80 new-nginx:1.0 /usr/local/nginx/sbin/nginx
**8) wg-nginx容器运行成功
[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3e0a3d93414f new-nginx:1.0 "/usr/local/nginx/sb…" 7 seconds ago Up 6 seconds 0.0.0.0:8000->80/tcp wg-nginx
9) 成功使用浏览器访问we-nginx容器的测试页面
案例1【11】:nsible-playbook电商项目实战:
1) 配置一台远程主机并查看连接情况
以下命令必须全部写在playbook中,否则无效
2) 设置nginx版本名称为变量并在后文playbook中使用
3) 使用模块安装apache、php及所需依赖
4) 使用模块分发apache整合php配置文件
5) 使用模块启动apache
6) 使用模块安装mysql等环境
7) 使用模块启动mysql
8) 使用模块为wordpress创建数据库并授权
9) 使用模块关闭防火墙
10) 使用模块设置触发为,关闭防火墙成功后重启apache
以上完成ansible-playbook的编写
11) 使用ansible-playbook命令检查剧本的准确性并执行
12) 使用浏览器访问并成功配置博客
案例2【11】:docker实战–27日作业
1)配置docker环境并安装
第一步:解压docker安装二进制包,生成docker的可执行程序
[root@master ~]# tar xf docker-18.09.6.tgz
[root@master ~]# cp -rvf docker/* /bin/
第二步:生成docker的配置文件
[root@master ~]# mkdir /etc/docker
[root@master ~]# mv daemon.json /etc/docker/
第三步:将docker的服务管理脚本放到指定位置
[root@master ~]# mv docker.service /usr/lib/systemd/system
启动docker
[root@master docker]# systemctl daemon-reload
[root@master docker]# systemctl start docker
2)设置docker镜像加速
[root@master ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart docker
[root@master ~]# docker info
3)使用命令搜索所有centos镜像
[root@master ~]# docker search centos
4)拉取centos镜像并使用命令查看镜像
[root@master ~]# docker pull centos
[root@master ~]# docker image ls
5)以守护进程方式运行基于centos的镜像并命名为centos1
[root@master ~]# docker run --name centos1 --rm -d centos:7 init
[root@master ~]# docker ps
6)以交互方式运行基于busybox镜像的容器并命名为busybox1
[root@master ~]# docker run --name busybox1 -it --rm busybox sh
7)使用命令查看所有容器
[root@master ~]# docker ps -a
8)使用命令查看busybox1的元数据
[root@master ~]# docker container inspect busybox1
9)使用命令停止所有容器并删除
[root@master ~]# docker rm -f $(docker ps -a -q)
10)使用命令删除所有镜像
[root@master ~]# docker image prune -a -f
案例3
1)安装ansible并配置远程主机免密连接
2)(编写lnmp.yml,以下所有操作必须写在playbook中),使用ansible模块分发源码包、安装包
3)使用ansible模块安装nginx依赖环境
4)编译安装nginx
5)推送配置文件并启动nginx
6)安装mysql和php相关服务
7)配置nginx和php整合
8)重启nginx并配置php测试页面为hello world
9)成功运行playbook
案例4
1) 配置安装docker
2) 设置镜像加速
3) 拉取centos镜像
4) 使用命令查看当前镜像
5) 交互方式运行基于centos镜像的容器,命名为centos1
6) 在容器内安装网络工具并查询网络
7) 退出容器并使用命令查看当前所有容器信息
8) 删除容器centos1
9) 删除centos镜像
关于镜像仓库
操作1:查看本地有哪些镜像
[root@master ~]# docker image ls
[root@master ~]# docker images
操作2:搜索镜像【比如搜索全部的nginx镜像】
[root@master ~]# docker search nginx
操作3:拉取镜像【拉取nginx:1.17.7-alpine】
[root@master ~]# docker image pull nginx:1.17.7-alpine
操作4:向docker仓库推送镜像
[root@master ~]# docker image push xxxxx
操作5:删除镜像
[root@master ~]# docker image rm -f nginx:2.0
[root@master ~]# docker rmi -f 470
操作6:查看镜像的详细信息
[root@master ~]# docker image inspect 82c
操作7:导出镜像操作【将nginx1.17.7-alpine导出】
[root@master ~]# docker image save 36189e6707f4>ngx.tar.gz
操作8:导入镜像【删除原有镜像,然后导入镜像】
[root@master ~]# docker load -i ngx.tar.gz
操作9:给镜像打标签【名称设置为nginx,tag设置为1.17.7-alpine】
[root@master ~]# docker image tag 361 nginx:1.17.7-alpine
操作10:将一个正在运行的容器制作成镜像
例子:先安装一个centos容器,在这容器中安装nginx,修改配置文件,然后将这个做了修改的容器制作成镜像
[root@master ~]# docker commit mycon1 nginx-temp:v0.1
docker container的子命令
docker的子命令
操作1:运行一个nginx容器
格式:docker run [选项] 镜像名 [命令]
选项:
例子:启动一个nginx,让nginx工作在前台
[root@master ~]# docker container run --name my1 nginx:1.17.9
例子:启动一个nginx,让nginx工作在前台,并且给用户绑定一个交互窗口
[root@master ~]# docker run --name my2 -it nginx:1.17.9 /bin/bash
例子:启动一个nginx,让nginx工作在后台
[root@master ~]# docker container run --name my1 -d nginx:1.17.9
操作2:登录已经启动的容器
例子:启动一个nginx容器工作在后台,然后登录这个容器
[root@master ~]# docker run --name mycentos2 --rm -d centos:7 /usr/sbin/init
[root@master ~]# docker exec -it mycentos2 /bin/bash
操作3:查看容器【已经停止的容器/正在运行的容器】
格式:docker ps [选项]
选项:
案例1 :显示所有容器的id
[root@master ~]# docker ps -q -a
案例2:仅仅显示正在运行的容器的ID
[root@master ~]# docker ps -q
c820c3ca2a1a
fe789a579425
eba7ee871cd2
b71e6fbad30b
操作3:杀死容器
案例:杀死myos2这个容器
[root@master ~]# docker kill myos2
案例:杀死全部正在运行的容器
[root@master ~]# docker kill $(docker ps -q)
操作4:删除容器【正在运行的容器/已经停止的容器】
案例:删除已经停止的容器myos2
[root@master ~]# docker rm myos2
案例:删除正在运行的容器myos3
[root@master ~]# docker rm -f myos3
案例:删除全部的容器,包括停止和运行的
[root@master ~]# docker rm -f $(docker ps -a -q)
[root@master ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
964b5dd9df18 bridge bridge local
2a6ad00f07cc host host local
319913a95126 none null local
案例:创建一个无网络模式的容器
[root@master ~]# docker run --name mybx2 -it --rm \
> --network none --hostname mybx2 \
> --dns 8.8.8.8 \
> --dns-search baidu.com \
> --add-host www.qq.com:1.1.1.1 \
> busybox
/ # ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
/ # hostname
mybx2
/ # cat /etc/resolv.conf
search linux.io
nameserver 8.8.8.8
暴露容器端口到网络
不做作暴露
[root@master ~]# docker run --name myngx1 -d --rm nginx——+
[root@master ~]# docker inspect myngx1 | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.3",
"IPAddress": "172.17.0.3",
[root@master ~]# curl 172.17.0.3
暴露到特定端口
[root@master ~]# docker run --name myngx2 -p 8903:80 -d --rm nginx
暴露到随机端口
[root@master ~]# docker run --name myngx3 -p 80 -d --rm nginx
[root@master ~]# docker ps
通过ps可以看到将docker的端口暴露到那个宿主机端口
联盟式网络
需要 创建两个容器,第二个容器使用第一个容器的地址
[root@master ~]# docker run --name c1 --rm -it --network centos:7 /bin/bash
[root@master ~]# docker run --name c2 --rm -it --network container:c1 centos:7 /bin/bash
修改docke容器的网络
案例:修改docker配置文件,默认用10.0.0作为容器IP
[root@master ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://mzxx8xy8.mirror.aliyuncs.com"],
"bip": "10.0.0.1/8",
"default-gateway": "10.0.0.100",
"dns": ["8.8.8.8"]
}
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart docker
启动容器时候,会挂在镜像
在容器中执行写入操作,会对镜像进行复制【写时复制】,然后在复制的镜像中进行存储
关闭容器的时候,会卸载原有镜像,而且复制的镜像会被删除
因此,默认情况下,关闭容器后,容器中全部数据都会被删除
docker volume是用于解决docker容器数据的持久存储问题
docker volume两种类型
docker使用volume的方法1:-v 容器的目录
案例1:将宿主机目录挂载到容器的/data/html目录下
[root@master ~]# docker run --name centos1 -it --rm -v /data/html centos:7 /bin/bash
docker使用volume的方法2:-v 宿主机上的目录:容器上的目录
案例2:将宿主机的/www挂载到容得/data/html目录下
[root@master ~]# docker run --name centos2 -it --rm \
> -v /www:/data/html \
> centos:7 /bin/bash
案例3:先创建一个容器,然后再创建一个容器,要求两个容器的挂载是使用相同的宿主机目录;而且两个容器的ip相同
[root@master ~]# docker run --name centos1 -it --rm -v /www:/data/html centos:7 /bin/bash
[root@master ~]# docker run --name centos2 --rm -it --volumes-from centos1 --network container:centos1 centos:7 /bin/bash
背景
dockerfile就是一个脚本文件,通过dockerfile文件,可以自动、按需制作镜像
制作镜像的方式:
1)commit:将一个现有容器制作成镜像
2)save:将一个本地镜像导出成一个tar文件,这个tar文件在其他主机导入以后,就行镜像了
3)dockerfile
dockerfile注意事项
1)Dockerfile文件名D大写
2)#表示注释
3)文件的第一行必须FROM指令
4)dockerfile中的指令通常是写成大写字母,但是大小写不敏感
1)FROM:指定基础镜像
2)LABEL:设置镜像的元数据
3)COPY:将宿主机上的文件复制到目标镜像文件中
案例:基于centos7做个镜像,在这个镜像中准备一个html文件
第一步:首先创建一个Dockerfile文件
[root@master ~]# cat Dockerfile
FROM centos:7
LABEL [email protected] \
date=20200330
COPY index.html /data/html/
第二步:准备要放入容器的index.html
[root@master ~]# echo "test page">index.html
[root@master ~]# ls
Dockerfile index.html
第三步:制作镜像
[root@master ~]# docker build -t img1 .
[root@master ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
img1 latest 4dd700f2e276 4 minutes ago 203 MB
第四步:基于新镜像启动容器
4)ADD:也是将一个文件放到镜像中,ADD支持url
FROM centos:7
LABEL [email protected] \
date=20200330
COPY index.html /data/html/
ADD nginx-1.17.9.tar.gz /tmp/
5)WORKDIR:类似执行cd命令
6)volume:用来指定挂载点目录
7)EXPOSE:暴露端口让用户可以访问
8)RUN:指定要执行的命令
9)CMD:指定docker运行之后,默认运行的程序,也就是ID为1的程序
案例:启动容器自动运行nginx为主进程
FROM centos:7
RUN yum install gcc gcc-c++ make pcre-devel zlib-devel ncurses-devel -y
ADD http://nginx.org/download/nginx-1.16.1.tar.gz /tmp/
RUN cd /tmp && tar xf nginx-1.16.1.tar.gz
WORKDIR /tmp/nginx-1.16.1
RUN ./configure --prefix=/usr/local/nginx
RUN make && make install
RUN echo 'daemon off;'>>/usr/local/nginx/conf/nginx.conf
COPY index.html /usr/local/nginx/html/
CMD ["/bin/sh", "-c", "/usr/local/nginx/sbin/nginx"]
10)ENTRYPOINT:设置容器运行起来以后要执行的命令,而且这个命令是不可以被替换,仅仅可以在这个命令后追加
FROM centos:7
RUN yum install gcc gcc-c++ make pcre-devel zlib-devel ncurses-devel -y
ADD http://nginx.org/download/nginx-1.16.1.tar.gz /tmp/
RUN cd /tmp && tar xf nginx-1.16.1.tar.gz
WORKDIR /tmp/nginx-1.16.1
RUN ./configure --prefix=/usr/local/nginx
RUN make && make install
RUN echo 'daemon off;'>>/usr/local/nginx/conf/nginx.conf
COPY index.html /usr/local/nginx/html/
CMD ["/usr/local/nginx/sbin/nginx"]
ENTRYPOINT ["/bin/sh","-c"]
11)ENV:设置变量
ENV NGX_VER="1.16.1" \
NGX_ROOT="/usr/local/nginx/"
docker容器的主进程
作业:
1 创建两个容器,让两个容器使用相同的网络地
2 创建一个nginx 容器,将nginx的80端口映射到宿主机的8442端口
3 创建一个容nginx容器,要求用户宿主机的/www目录来作为nginx网站根目录
4 编写dockerfile,制作镜像,要求如下:
1)基于centos7做镜像
2)将nginx的安装包放入镜像的/tmp下
3)准备一个nginx的配置文件,放到/etc/nginx下
4)暴露两个端口80 443
友情提示4:
# vim Dockerfile
FROM centos:7
ADD http://nginx.org/download/nginx-1.17.9.tar.gz /tmp
COPY nginx.conf /etc/nginx/
EXPOSE 80/tcp 443/tcp
构建镜像
# docker build -t img6 .
容器编排:启动的集群包含多个服务,而且多个服务之间存在关联关系;而且多个服务启动存在先后顺序
curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
容器编排
离线安装:
1:上传包
2:赋权 chmod +x docker-compose
3:移动到/bin mv docker-compose /bin
验证:
docker-compose --version
案例:通过docker compose启动两个容器,nginx,redis
[root@master ~]# vim docker-compose.yml 编写yaml文件
version: '3'
services:
web:
image: nginx:1.17.9
ports:
- 85:80
links:
- sql
sql:
image: redis:latest
[root@master ~]# docker-compose up -d 启动定义在yaml文件中的容器
[root@master ~]# docker-compose ps 查看通过yaml文件启动的容器状态
Name Command State Ports
------------------------------------------------------------------------
root_sql_1 docker-entrypoint.sh redis ... Up 6379/tcp
root_web_1 nginx -g daemon off; Up 0.0.0.0:85->80/tcp
[root@master ~]# docker-compose down 关闭通过yaml文件启动的容器
Stopping root_web_1 ... done
Stopping root_sql_1 ... done
Removing root_web_1 ... done
Removing root_sql_1 ... done
第一步:创建目录,用来作为volume的数据和配置文件目录
[root@master ~]# mkdir /data/nginx/{html,conf} -pv
第二步:准备nginx的配置文件
[root@master ~]# ls /data/nginx/conf/
此配置文件指定了网站根目录是/www/html
[root@master ~]# cat /data/nginx/conf/nginx.conf | grep “/www/html”
root /www/html;
第三步:编写docker-compose文件
[root@master ~]# vim docker-compose.yml
version: '3'
services:
web:
image: nginx:1.17.9
restart: always
container_name: myweb
ports:
- 85:80
volumes:
- "/data/nginx/www:/www/html"
- "/data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf"
第四步:执行yaml文件,创建nginx容器
[root@master ~]# docker-compose up -d
查看是否为up状态
[root@master ~]# docker-compose ps
Name Command State Ports
---------------------------------------------------------
myweb nginx -g daemon off; Up 0.0.0.0:85->80/tcp
第五步:准备测试页面,访问测试
[root@master ~]# echo “123”>/data/nginx/www/1.html
第六步:修改yaml文件
[root@master ~]# vim docker-compose.yml
version: '3'
services:
web:
image: nginx:1.17.9
restart: always
container_name: myweb
ports:
- 85:80
depends_on:
- php
links:
- php
volumes:
- "/data/nginx/www:/www/html"
- "/data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf"
php:
image: php:5.6-fpm
container_name: myphp
restart: always
volumes:
- "/data/nginx/www:/www/html"
第七步:修改nginx的配置文件,兼容php
[root@master ~]# vim /data/nginx/conf/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 /www/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ \.php$ {
root /www/html;
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
- 85:80
volumes:
- "/data/nginx/www:/www/html"
- "/data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf"
php:
image: php:5.6-fpm
container_name: myphp
restart: always
depends_on:
- web
volues:
- "/data/nginx/www:/www/html"
第八步:执行yaml文件,并查看容器状态
[root@master ~]# docker-compose up -d
[root@master ~]# docker-compose ps
第九步:编写php测试页
[rooot@master ~]# cd /data/nginx/www/
[root@master html]# vim a.php
案例:通过compose部署nginx+php
1:准备volume用的目录
[root@master ~]# mkdir /data/nginx/{www,conf} -pv
mkdir: created directory ‘/data’
mkdir: created directory ‘/data/nginx’
mkdir: created directory ‘/data/nginx/www’
mkdir: created directory ‘/data/nginx/conf’
2、准备nginx配置文件
[root@master ~]# cd /data/nginx/conf/
[root@master conf]# cp /etc/nginx/nginx.conf ./
[root@master conf]# ls
nginx.conf
3、编写docker-compose部署nginx
概念:
安装方法
在线
离线
离线安装包:https://storage.googleapis.com/harbor-releases/harbor-offline-installer-v1.5.4.tgz
安装harbor的要求
[root@node2 ~]# tar xvf harbor-offline-installer-v1.5.4.tgz
[root@node2 ~]# vim harbor/harbor.cfg
修改harbor配置文件的主机名部分
hostname = node2
[root@node2 harbor]# ./prepare
[root@node2 harbor]# ./install.sh
[root@node2 harbor]# docker ps
创建两个项目,每个项目对应一类镜像的
鼠标点击实现,略
将myphp 1.0镜像推送到harbor
第一步:修改镜像的标签
[root@sql ~]# cd harbor
[root@sql harbor]# docker-compose down
[root@sql harbor]# rm -rf /data*
[root@sql harbor]# ./prepare
[root@sql harbor]# ./install.sh
请基于Centos镜像构建Nginx环境
准备一台Centos7的服务器,检测网络正常
检查服务器docker运行是否正常,如没有请安装
[root@master ~]# yum install docker -y
[root@master ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://mzxx8xy8.mirror.aliyuncs.com"]
}
[root@master ~]# systemctl start docker
[root@master ~]# docker info
[root@master ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@master ~]#
[root@master ~]# docker pull centos:7
[root@master ~]# mkdir /nginx
[root@master ~]# cd /nginx/
[root@master nginx]# echo "test for my page">index.html
root@master ~]# cd /nginx/
[root@master nginx]# vim Dockerfile
FROM centos:7
RUN yum install gcc gcc-c++ make pcre-devel zlib-devel ncurses-devel -y
ADD http://nginx.org/download/nginx-1.16.1.tar.gz /tmp/
RUN cd /tmp && tar xf nginx-1.16.1.tar.gz
WORKDIR /tmp/nginx-1.16.1
RUN ./configure --prefix=/usr/local/nginx
RUN make && make install
RUN echo 'daemon off;'>>/usr/local/nginx/conf/nginx.conf
COPY index.html /usr/local/nginx/html/
CMD ["/usr/local/nginx/sbin/nginx"]
ENTRYPOINT ["/bin/sh","-c"]
[root@master ~]# cd /nginx/
[root@master nginx]# docker build -t nginx:v1.0 .
[root@master nginx]# docker run --name myngx -d --rm nginx:v1.0
[root@master nginx]# docker run --name myngx -d --rm -p 80:80 nginx:v1.0 /usr/local/nginx/sbin/nginx
略
构建LAMP镜像并发布电商
1、 准备一台Centos7的服务器,检测网络正常
2、 检查服务器docker运行是否正常,如没有请安装
3、 请编写Dockerfile构建Apache+php+mysql镜像要求如下:
a) 基础镜像为Centos
b) 将/var/www/html目录作为挂载点
c) 暴漏端口:80
d) 构建镜像名字为lamp:1.1
4、 请基于lamp:1.1镜像运行一个容器,要求如下:
a) 容器名字为ds
b) 将/opt/html挂载到容器的/var/www/html目录下
c) 将宿主机的80端口映射到容器的80端口
5、 上传电商项目包到web服务器发布目录
6、 成功发布
1、 案例题目
请基于Centos镜像构建Nginx环境
2、 思路要求
准备一台Centos7的服务器,检测网络正常
检查服务器docker运行是否正常,如没有请安装
请检查本机是否有Centos镜像,如没有请下载镜像
请创建一个nginx目录,以此目录作为构建镜像目录
请编写测试页面index.html,内容为自定
请编写Dockerfile构建Nginx镜像,基础镜像为centos,新镜像名字为:nginx:v1.0,并将自定义的测试页面复制到容器中
成功构建nginx:v1.0镜像
请基于nginx:v1.0镜像,运行一个新的容器
请将容器的80端口映射在宿主机的80端口上
访问测试,成功访问到自定义的测试页面
1、 案例题目
构建Tomcat镜像并发布solo博客
2、 思路要求
1、 准备一台Centos7的服务器,检测网络正常
2、 检查服务器docker运行是否正常,如没有请安装
3、 请编写Dockerfile构建Tomcat镜像要求如下:
a) 基础镜像为java
b) tomcat版本为8.5
c) 将webapps目录作为挂载点
d) 暴漏端口:8080和8443
e) 构建镜像名字为tomcat:1.1
第一步:下载tomcat镜像文件
http://mirror.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.51/bin/apache-tomcat-8.5.51.tar.gz
第二步:编写Dockerfile文件
FROM centos:7
RUN yum install java-1.8.0-openjdk iproute -y
ADD apache-tomcat-8.5.51.tar.gz /usr/local/
EXPOSE 8080
EXPOSE 8443
VOLUME ["/usr/local/apache-tomcat-8.5.51/webapps/ROOT/"]
CMD ["/bin/bash","-c","/usr/local/apache-tomcat-8.5.51/bin/catalina.sh run"]
4、 请基于tomcat:1.1镜像运行一个容器,要求如下:
a) 容器名字为solo
b) 将/opt/html挂载到tomcat的webapps目录下
c) 将宿主机的80端口映射到容器的8080端口
[root@master ~]# mkdir /opt/html
[root@master ~]# docker run --name solo --rm -d -p 80:8080 -v /opt/html/:/usr/local/apache-tomcat-8.5.51/webapps/ROOT/ tomcat:1.3
5、 上传solo博客到服务器,并修改访问url和端口
6、 成功发布solo博客
1、 案例题目
使用docker部署Nginx
2、 思路要求
1 准备一台Centos7的服务器,检测网络正常
2 检查服务器docker运行是否正常,如没有请安装
3 请基于busybox镜像构建自己的镜像,要求运行镜像后打印“Hello Docker”
4 请使用docker下载Nginx镜像,并查看验证下载成功
5 请基于Nginx镜像构建自定义的Nginx镜像:
要求:
\1. 新镜像名字为:自己的名字-Nginx
\2. Nginx暴露端口为80和443
\3. Nginx默认测试页面修改为:“Welcome to Nginx!”
\4. 将Nginx的网站根目录设置为匿名卷挂载点
6 请基于你的Nginx镜像运行一个新的容器,容器名为nginx ,需将容器的80端口映射在宿主机的80端口上,容器要以守护进程运行
7 请访问测试,容器运行正常
1、 案例题目
构建Tomcat镜像并发布solo博客
2、 思路要求
1、 准备一台Centos7的服务器,检测网络正常
2、 检查服务器docker运行是否正常,如没有请安装
3、 请编写Dockerfile构建Tomcat镜像要求如下:
a) 基础镜像为java
b) tomcat版本为8.5
c) 将webapps目录作为挂载点
d) 暴漏端口:8080和8443
e) 构建镜像名字为tomcat:1.1
4、 请基于tomcat:1.1镜像运行一个容器,要求如下:
a) 容器名字为solo
b) 将/opt/html挂载到tomcat的webapps目录下
c) 将宿主机的80端口映射到容器的8080端口
5、 上传solo博客到服务器,并修改访问url和端口
6、 成功发布solo博客
**(一)**实验一:docker实战
1) 准备两台服务器,安装部署docker .
2) 设置镜像加速 .
在其中一台操作如下
3) 创建zabbix数据库数据卷/data/zabbix/mysql .
4) 运行基于mysql:5.7的容器并挂载上题数据卷、配置zabbix数据库、数据库用户等信息。 .
5) 运行基于zabbix-server-mysql容器并配置相关信息,连接4)中容器 .
6) 运行基于zabbix-web-nginx-mysql 容器并配置相关信息,连接4)、5)中容器 .
在另一台上操作如下
7) 运行基于zabbix-agent的容器并配置host主机等信息 .
8) 访问zabbix首页并配置相关信息 .
9) 创建自动发现监控zabbix-agent .
**(二)实验二:docker实战部署电商项目 4.
1)Docker查看镜像仓库中lnmp镜像并拉取 .
2)创建lnmp+电商项目所需数据卷 .
3)运行基于lnmp的容器挂载数据卷并做端口映射 .
4)上传Dz包到宿主机对应挂载目录下 .
5) 进入容器查看是否解压成功并授予可写权限 .
6)进入镜像启动相关服务 .
7)创建基于mysql镜像的容器并配置相关参数 .
8)使用命令查看lnmp容器元数据 .
9)成功访问Dz首页并成功配置 .
**(三)****实验三:shell
1)每周日晚23点,对数据库服务器上的webdb库做完整备份
2)备份文件保存到系统的/mysqlbak目录里
3)用系统日期做备份文件名webdb-年-月-日.sql
4)每次完整备份后都生成新的binlog日志
5)把当前所有binlog日志备份到/mysqlbinlog目录下
**(一)Docker实战
\1. 安装docker
编写dockerfile创建apache镜像
\2. FROM命令正确
\3. 安装命令正确
\4. 将测试页面显示内容改为hello world !
\5. 前台启动命令zhengq
\6. 编写Dockerfile并构建
\7. 查看镜像
8. 创建容器测试并访问页面
**(二)docke-compose实战
\1. 安装docker,若安装请先删除
使用docker-compose部署zabbix监控mysql,所有操作需写在zabbix.yml中,否则0分
\2. 编写mysql服务,基础镜像为mysql:5.6
\3. mysql端口映射命令正确 .
\4. 环境变量设置正确
\5. 编写zabbix-server服务,基础镜像为zabbix-server
\6. 端口映射命令正确,Zabbix环境变量设置正确
\7. 编写zabbix-web服务,基础镜像从服务器中选择
\8. 端口映射命令正确,环境变量设置正确
\9. 成功运行zabbix.yml并访问
**(一)****实验一:docker Harbor私有仓库搭建
1) 安装部署docker-compose 编排工具 .
2) 下载Habor并且解压
3) 编辑habor配置文件,修改hostname为本机ip地址
4) 设置habor web平台登录账户admin,修改密码为wg123456
5) 启动Harbor服务
6) 新增项目名为wordpress,设置为公开 .
7) 创建用户wg01 并分配权限,可以正常上传下载镜像 .
**(二)****实验二:docker实战部署wordpress 6.
1)在/usr/local/src 下新建目录 wordpress .
2)进入wordpress目录下,编辑wordpress.yaml .
3) 指定所创建镜像的基础镜像 .
4)将容器数据卷/var/lib/mysql挂载到本地/mysql/data下 .
5)设置自动重启.
6)指定mysql的root账号初始密码为123456 .
7)指定容器 启动后要创建的数据库为wordpress .
8)指定容器在启动后要创建的普通用户tom,授权允许远程登录mysql .
9)设置tom的远程登录密码为123456 .
10)将容器的80端口映射到本地的8080上 .
11)构建并运行项目 .
12)浏览器访问8080端口,登录wordpress安装界面 .
13)将wordpress镜像打个tag wg01并上传到私有仓库 .
[root@sql ~]# cd harbor
[root@sql harbor]# docker-compose down
[root@sql harbor]# rm -rf /data*
[root@sql harbor]# ./prepare
[root@sql harbor]# ./install.sh
**(一)**实验一:docker Harbor私有仓库搭建
1) 安装部署docker-compose 编排工具
2) 下载Habor并且解压
3) 编辑habor配置文件,修改hostname为本机ip地址
[root@node2 ~]# cd harbor
[root@node2 harbor]# vim harbor.cfg
修改一行
hostname = 192.168.31.66
4) 设置habor web平台登录账户admin,修改密码为123
[root@node2 ~]# cd harbor
[root@node2 harbor]# vim harbor.cfg
修改一行
harbor_admin_password = 123
5) 启动Harbor服务
[root@node2 ~]# cd harbor
[root@node2 harbor]# ./prepare
[root@node2 harbor]# ./install.sh
6) 正常登陆harbor
7) 新增项目名为wordpress,设置为公开
8) 创建用户wg01 并分配权限,可以正常上传下载镜像
**(二)****实验二:docker实战部署wordpress **
9) 在/usr/local/src 下新建目录 wordpress
[root@sql ~]# mkdir /usr/local/src/wordpress
10) 进入wordpress目录下,编辑wordpress.yaml
[root@sql ~]# cd /usr/local/src/wordpress
[root@sql wordpress]# vim wordpress.yaml
11) 指定所创建镜像的基础镜像
12) 将容器数据卷/var/lib/mysql挂载到本地/mysql/data下
13) 指定mysql的root账号初始密码为123456
14) 指定容器 启动后要创建的数据库为wordpress
15) 指定容器在启动后要创建的普通用户tom,授权允许远程登录mysql
16) 设置tom的远程登录密码为123456
17) 将容器的80端口映射到本地的8080上
yaml中的内容
version: '3.1'
services:
wordpress:
image: wordpress
restart: always
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: tom
WORDPRESS_DB_PASSWORD: 123456
WORDPRESS_DB_NAME: wordpress
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: tom
MYSQL_PASSWORD: '123456'
MYSQL_RANDOM_ROOT_PASSWORD: '123456'
volumes:
- /var/lib/mysql:/mysql/data
18) 构建并运行项目
[root@node2 wordpress]# docker-compose -f wordpress.yaml up -d
[root@node2 wordpress]# docker-compose -f wordpress.yaml ps
19) 浏览器访问8080端口,登录wordpress安装界面
20) 将wordpress镜像打个tag wg01并上传到私有仓库
第一步:信任私有镜像仓库-harbor
修改docker配置文件
[root@node2 ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://mzxx8xy8.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.31.66"]
}
重启docker
[root@node2 ~]# systemctl daemon-reload
[root@node2 ~]# systemctl restart docker
第二步:按照harbor提示,给镜像打标签
[root@node2 ~]# docker tag docker.io/wordpress:latest 192.168.31.66/wordpress/wordpress:01
第三步:登录harbor
[root@node2 ~]# docker login 192.168.31.66
Username: admin
Password:
Login Succeeded
第四步:上传镜像文件
[root@node2 ~]# docker push 192.168.31.66/wordpress/wordpress:01
第四步:退出登录
[root@node2 ~]# docker logout
放假安排:
[root@node2 ~]# mkdir /data/nginx/{conf,www} -pv
[root@node2 ~]# cp //etc/nginx/nginx.conf.default /data/nginx/conf/nginx.conf
[root@node2 ~]# vim /data/nginx/conf/nginx.conf
[root@node2 ~]# cat docker-compose.yaml
version: '3'
services:
nginx:
image: nginx:1.17.9
restart: always
container_name: nginx
ports:
- 80:80
volumes:
- /data/nginx/www:/data/html
- /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
启动容器
[root@node2 ~]# docker-compose up -d
[root@node2 ~]# docker-compose ps
Name Command State Ports
---------------------------------------------------------
nginx nginx -g daemon off; Up 0.0.0.0:80->80/tcp
准备nginx的测试页
[root@node2 ~]# echo "test page
">/data/nginx/www/index.html
访问测试:http://192.168.1.66/index.html
[root@node2 ~]# mkdir php
[root@node2 ~]# cd php
[root@node2 php]# cat Dockerfile
FROM centos:7
RUN yum install php php-fpm php-mysql php-devel php-gd -y
RUN sed -i "s/listen = 127.0.0.1:9000/listen = 0.0.0.0:9000/g" /etc/php-fpm.d/www.conf
RUN sed -i "s/listen.allowed_clients = 127.0.0.1/; listen.allowed_clients = 127.0.0.1/g" /etc/php-fpm.d/www.conf
EXPOSE 9000
CMD ["/bin/bash","-c","/usr/sbin/php-fpm"]
version: '3'
services:
nginx:
image: nginx:1.17.9
restart: always
container_name: nginx
ports:
- 80:80
volumes:
- /data/nginx/www:/data/html
- /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
php:
build:
context: ./php/
dockerfile: Dockerfile
volumes:
- /data/nginx/www:/data/html
修改nginx配置文件,让nginx链接php
[root@node2 ~]# vim /data/nginx/conf/nginx.conf
location ~ \.php$ {
root /data/html;
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
通过docker-compose启动服务
[root@node2 ~]# docker-compose up -d
[root@node2 ~]# docker ps
编写php测试页面,并测试
[root@node2 ~]# cd /data/nginx/www/
[root@node2 www]# vim test.php
version: '3'
services:
nginx:
image: nginx:1.17.9
restart: always
container_name: nginx
ports:
- 80:80
links:
- php
volumes:
- /data/nginx/www:/data/html
- /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
php:
build:
context: ./php/
dockerfile: Dockerfile
#restart: always
#container_name: php
links:
- mysql
volumes:
- /data/nginx/www:/data/html
mysql:
image: mysql:5.7
restart: always
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: 123
MYSQL_USER: dbuser
MYSQL_PASSWORD: 123
[root@node2 ~]# vim /data/nginx/www/conn.php