概念:
- image:镜像,用于启动一个容器
- container:容器
- network:网络
- volumes:卷,用来持久存储
- plugin:插件
什么是docker?
- docker就是用来管理容器的工具
什么是容器?
- 容器就是一个独立的程序运行环境
docker用在什么场景?
- 提升开发效率
- 简化开发难度
- 实现服务隔离
- 实现快速部署
版本:
- CE:社区版
- EE:商业版本
系统条件
- 64位的CPU
- 内核版本3.10及以上
- 内核支持cggroups 和 namespace
安装docker
- 第一步:上传docker的rpm包到Linux
- 第二步:进行安装
[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
镜像:
- 其实就是一个模板
- 通过镜像可以快速启动一个服务
- 比如,通过nginx镜像,就可以快速启动一个nginx服务
使用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
启动容器的命令格式:
- docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
启动busybox容器
[root@master ~]# docker run --name mybox1 -it busybox
- -it:进入容器
在容器中,启动一个web服务
# mkdir /data/html
# echo "test page">/data/html/index.html
# httpd -f -h /data/html
在宿主机中执行ps,查看进容器
[root@master ~]# docker ps
- docker ps 仅仅可以查看正在运行的容器,已经停止的容器看不到
- docker ps -a可以查看全部的容器
- 一旦退出容器,容器会变成停止状态
查看容器的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安装包
- yum localinstall进行安装
- 编写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
7) 请基于new-nginx:1.0镜像运行一个容器,容器名为wg-nginx,并且将本机的8000端口映射到容器的80端口(10分)
第一步:修改镜像名称
[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
第二步:启动容器
- 这个容器需要进行端口转发,就是将访问宿主机的8000转发到容器的80端口
- 这个容器需要运行的程序是nginx,启动nginx的命令:/usr/local/nginx/sbin/nginx
[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容器的测试页面
- 用浏览器访问自己linux主机的ip:http://192.168.0.63:8000/
27日【11】案例
案例1: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:docker实战—27日作业
1)配置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 /bin/bash
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
docker使用
- 管理镜像
- 管理容器
- 管理存储
- 管理网络
管理镜像:
- build :基于dockerfile制作镜像
- inspect:显示镜像的详细信息
- load:从压缩包中导入镜像
- save:将当前的某个镜像导出制作成压缩包
- ls:查看当前本地有哪些镜像
- pull:从镜像仓库拉取镜像到本地
- push:将一个本地镜像推送到镜像仓库
- rm:删除镜像
- tag :给镜像打标签
- prune:删除所有未使用的镜像
关于镜像仓库
- 专门用来存储docker镜像的服务器,称之为镜像仓库
- 网络上有很多镜像仓库
操作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的子命令
- cp:在宿主机和容器中互相发送
- run:启动一个容器
- inspect:显示容器的详细信息
- pause:挂起容器
- unpause:将挂起的容器继续运行
- stop:关闭容器
- start:将关闭的容器重新运行
- prune:删除所有已经停止的容器
- rm:删除指定的容器
- rename:修改容器的名称
- stats:动态显示容器的资源使用情况
- ls:显示容器
- logs:查看容器中的日志信息
- exec:登录一个指定的容器
docker的子命令
- kill:杀死容器
- ps:查看容器
- rm:删除容器
- run:运行容器
操作1:运行一个nginx容器
格式:docker run [选项] 镜像名 [命令]
选项:
- -d:让容器工作在后台
- -i:以交互防护启动容器
- -t:给用户绑定一个终端
- –name:给容器设置名称
- –rm:容器停止后自动删除容器
例子:启动一个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 [选项]
选项:
- -a:显示全部的容器,包括已经的容器
- -q:仅仅显示容器的ID
案例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)