Docker实战(精简版本)
一、Docker 简介:
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
什么是Docker?
Docker特点:
- (1)上手快
- (2)职责的逻辑分类
- (3)快速高效的开发生命周期
- (4)鼓励使用面向服务的架构
Docker组件:
Docker客户端和服务器
Docker是一个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker提供了一个命令行工具Docker以及一整套RESTful API。你可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。
二、Docker安装与启动
在VMware Workstation中安装CentOS7
使用ip addr命令查看本地IP:
ip addr
使用yum命令在线安装Docker:
yum install docker
安装后查看Docker版本:
docker -v
启动与停止Docker
前提:docker是一个C/S架构,操作docker必须先启动docker 服务端
systemctl命令是系统服务管理器指令,它是 service 和 chkconfig 两个命令组合。
- 启动docker:
systemctl start docker
- 停止docker:
systemctl stop docker
- 重启docker:
systemctl restart docker
- 查看docker状态:
systemctl status docker
- 开机启动:
systemctl enable docker
三、 Docker镜像操作
列出docker下的所有镜像:
docker images
- REPOSITORY:镜像所在的仓库名称
- TAG:镜像标签
- IMAGE ID:镜像ID
- CREATED:镜像的创建日期(不是获取该镜像的日期)
- SIZE:镜像大小
- 这些镜像都是存储在Docker宿主机的/var/lib/docker目录下
搜索镜像:
docker search 镜像名称
- NAME:仓库名称
- DESCRIPTION:镜像描述
- STARS:用户评价,反应一个镜像的受欢迎程度
- OFFICIAL:是否官方
- AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的
使用命令拉取镜像:
docker pull centos:7
查看所有镜像:
docker images
添加ustc的镜像
ustc是老牌的linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在用。ustc的docker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共服务。
https://lug.ustc.edu.cn/wiki/mirrors/help/docker
步骤:
- (1)编辑该文件:vi /etc/docker/daemon.json //
如果该文件不存在就手动创建;说明:在centos7.x下,通过vi。 - (2)在该文件中输入如下内容:
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
(3)注意:一定要重启docker服务,如果重启docker后无法加速,可以重新启动OS
然后通过docker pull命令下载镜像:速度杠杠的。
- 删除指定镜像
docker rmi $IMAGE_ID
查看zookeeper镜像是否已经删除:
删除所有镜像
docker rmi `docker images -q`
操作原理:先查询出所有镜像ID ,在进行删除
列出所有镜像ID
docker images -q
四、 Docker容器操作
查看容器
查看正在运行容器:
docker ps
查看所有的容器(启动过的历史容器):
docker ps -a
查看最后一次运行的容器:
docker ps –l
查看停止的容器:
docker ps -f status=exited
创建与启动容器
创建容器常用的参数说明:
创建容器命令:
docker run
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
–name :为创建的容器命名。
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
交互式容器
原理:创建容器并进入容器,退出容器,服务停止。
创建一个交互式容器并取名为mycentos
docker run -it --name=mycentos centos:7 /bin/bash
注:–name=mycentos指的是容器名称 centos:7 镜像名称 执行命令完成后,就已经进入centos7容器了,和宿主机centos7一样,只不过一个是宿主机,另一个是容器而已。
复制会话,这时我们通过ps命令查看,发现可以看到启动的容器,状态为启动状态
执行命令:docker ps
使用exit命令 退出当前容器
然后用ps -a 命令查看发现该容器也随之停止:
守护式容器
前提:创建容器,不进行容器,后台启动,只要不关闭容器,容器就一直处于启动状态。
创建一个守护式容器:如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。命令如下(容器名称不能重复):
docker run -di --name=mycentos1 centos:7
查看容器是否启动:
登录守护式容器方式:
docker exec -it container_name (或者 container_id) /bin/bash
(exit退出时,容器不会停止)
退出容器:
查看状态:
从图中可以看出,exit退出容器,mycentos1容器,还是可以正常处于启动状态。
停止与启动容器
停止正在运行的容器:
docker stop $CONTAINER_NAME/ID
执行命令容器停止后,查看容器启动状态:
启动已运行过的容器:
docker start $CONTAINER_NAME/ID
前提:先查看那些容器启动过
查看启动过的容器:
docker ps -a
在执行启动以前启动过的容器命令:
docker start mycentos1
文件拷贝
前提:容器服务必须启动才可以进行文件拷贝
如果我们需要将文件拷贝到容器内可以使用cp命令
docker cp 需要拷贝的文件或目录 容器名称:容器目录
案例演示:
在宿主机上创建/testfile文件:
执行命令:
echo 123 > testfile
把宿主机testfile文件复制到mycentos1 /usr/loca目录下:
执行命令:
docker cp testfile mycentos1:/usr/local
登录容器查看文件在/usr/lcoal目录下面是否存在:
登录mycentos1容器:
也可以将文件从容器内拷贝出来
docker cp 容器名称:容器目录 需要拷贝的文件或目录
案例演示:
先把宿主机上的testfile文件删除,在从mycentos1容器中将mycentos1 /usr/lcoal 目录下面的testfile文件复制到宿主机上。
第一步:删除宿主机上的testfile文件:
第二步:将mycentos1容器中将mycentos1 /usr/lcoal 目录下面的testfile文件复制到宿主机上。
执行命令:
docker cp mycentos1:/usr/local/testfile newTestfile
docker cp mycentos1:/usr/local/test2 /usr
格式:docker cp 容器名:目录下的文件/目录 文件名/目录名
注:后台的文件名如果不一致,代表重命名
目录挂载
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
创建容器 添加-v参数 后边为 宿主机目录:容器目录
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos2 centos:7
格式1:docker run -di -v 宿主机目录:容器目录 –name=新的容器名 镜像名称:tag
格式2:docker run -di –name=新的容器名 -v 宿主机目录:容器目录 镜像名称:tag
案例演示01:
1、在宿主机/usr/local/myhtml创建目录:
2、创建一个新的容器与宿主机进行目录挂在,也就是目录共享,改变宿主机挂在目录下的文件,容器中的文件随之改变。
执行命令:
docker run -di --name=mycentos2 -v /usr/local/myhtml/:/usr/local/nh centos:7
格式:docker run -di --name=新的容器名 -v 宿主机目录:容器目录 镜像名称:tag
查看刚启动的容器:
登录容器,查看在/usr/lcoal容器目录下面是否存在nh目录:
在宿主机的/usr/local/myhtml目录下,添加index.html文件:
登录容器,查看在,mycentos2容器的/usr/local/nh/目录下面是否存在index.html
案例演示02(重点):
上传cas文件夹到宿主机挂载目录/usr/local/myhtml下面,登录容器,查看文件?
先查看运行的容器,登录容器,查看:
注:如果你共享的是多级的目录,可能会出现权限不足的提示。
解决方案:这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题
docker run -di --name=mycentos3 -v /usr/local/myhtml/:/usr/local/mh --privileged=true centos:7
查看容器是否启动:
登录容器,查看文件是否有权限:
可以正常查看文件!!!
4.6查看容器IP地址
我们可以通过以下命令查看容器运行的各种数据
docker inspect mycentos2
注:此命令需要在宿主机上执行,容器内部无效。
也可以直接执行下面的命令直接输出IP地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos2
4.7删除容器
删除指定的容器:
docker rm $CONTAINER_ID/NAME
注意,只能删除停止的容器
效果图:
删除所有容器:
docker rm `docker ps -a -q`
五、部署应用
5.1 MySQL部署
5.1.1拉取MySQL镜像
docker pull mysql
查看镜像
5.1.2创建MySQL容器
docker run -di –name=pinyougou_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
-p 代表端口映射,格式为 宿主机映射端口:容器运行端口
-e 代表添加环境变量 MYSQL_ROOT_PASSWORD是root用户的登陆密码
5.1.3进入MySQL容器,登陆MySQL
进入mysql容器
docker exec -it pinyougou_mysql /bin/bash
在容器中,登陆mysql
mysql -u root -p
在容器中,退出mysql,然后从容器中退出到宿主机:
查看,正在运行的容器:
5.1.4远程登陆MySQL
(1)我们在我们本机的电脑上去连接虚拟机Centos中的Docker容器,这里192.168.45.13是虚拟机操作系统的IP
(2)在本地客户端执行建库脚本
执行“资源/建库语句/pinyougoudb.sql”
(1)我们在我们本机的电脑上去连接虚拟机Centos中的Docker容器,这里192.168.45.142是虚拟机操作系统的IP
(2)在本地客户端,创建数据库病,执行建库脚本
执行“资源/建库语句/pinyougoudb.sql”
5.1.5查看容器IP地址
我们可以通过以下命令查看容器运行的各种数据
docker inspect pinyougou_mysql
运行效果如下:
我们可以看到我们的数据库服务器的IP是172.17.0.3
5.2 tomcat部署
5.2.1拉取tomcat镜像
docker pull tomcat:7-jre7
5.2.2创建tomcat容器
创建容器用于部署单点登录系统(CAS) -p表示地址映射:
docker run -di --name=pinyougou_tomcat -v /usr/local/myhtml/:/usr/local/tomcat/webapps --privileged=true -p 9000:8080 tomcat:7-jre7
docker run -di --name=pinyougou_tomcat -v /usr/local/myhtml/:/usr/local/tomcat/webapps --privileged=true -p 9000:8080 tomcat:7-jre7
格式:
–privileged=true :权限赋予
9000:8080:端口映射
7-jre7 指:tag
查看tomcat容器启动状态:docker ps
浏览器验证:
http://192.168.45.142:9000/cas/login
5.2.3部署web应用
(1)修改cas系统的配置文件,修改数据库连接的url
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"p:driverClass="com.mysql.jdbc.Driver"p:jdbcUrl="jdbc:mysql://172.17.0.3:3306/pinyougoudb?characterEncoding=utf8"p:user="root"p:password="root" />
测试:地址栏输入:http://192.168.45.142:9000/cas/login
tomcat和mysql联通:
5.3 Nginx部署
5.3.1拉取Nginx镜像
docker pull nginx
5.3.2创建Nginx容器
docker run -di --name=pinyougou_nginx -p 80:80 nginx/bin/bash
5.3.3测试Nginx
浏览器地址栏输入: http://192.168.45.142
5.3.4配置反向代
官方的nginx镜像,nginx配置文件nginx.conf 在/etc/nginx/目录下。
在容器内编辑配置文件不方便,我们可以先将配置文件从容器内拷贝到宿主机,编辑修改后再拷贝回去。
(1)从容器拷贝配置文件到宿主机
docker cp pinyougou_nginx:/etc/nginx/nginx.conf nginx.conf
查看容器中是否有这个文件:
(2)编辑nginx.conf,添加反向代理配置
前提:查看tomcat端口:
upstream tomcat-cas {server 172.17.0.4:8080;}server {listen 80;server_name passport.pinyougou.com;location / {proxy_pass http://tomcat-cas;index index.html index.htm;}}
(3)将修改后的配置文件拷贝到容器
docker cp nginx.conf pinyougou_nginx:/etc/nginx/nginx.conf
(4)重新启动容器
docker restart pinyougou_nginx
(5)设置域名指向
192.168.45.142 passport.pinyougou.com
浏览器测试:http:// passport.pinyougou.com/cas/login
5.4 Redis部署
5.4.1拉取Redis镜像
docker pull redis
5.4.2创建Redis容器
docker run -di --name=pinyougou_redis -p 6379:6379 redis
5.4.3客户端测试
在你的本地电脑命令提示符下,用window版本redis测试
redis-cli -h 192.168.247.135
六、备份与迁移
6.1容器保存为镜像
我们可以通过以下命令将容器保存为镜像
docker commit pinyougou_nginx mynginx
- pinyougou_nginx是容器名称
- mynginx是新的镜像名称
此镜像的内容就是你当前容器的内容,接下来你可以用此镜像再次运行新的容器
6.2镜像备份
docker save -o mynginx.tar mynginx
-o 输出到的文件
执行后,运行ls命令即可看到打成的tar包
6.3镜像恢复与迁移
首先我们先删除掉mynginx镜像
然后执行此命令进行恢复
docker load -i mynginx.tar
-i 输入的文件
执行后再次查看镜像,可以看到镜像已经恢复
Docker实战(精简版本)相关推荐
- Docker 实战教程之从入门到提高(二)
本系列第一篇文章,Docker 实战教程之从入门到提高 (一),我们已经介绍了如何在 Ubuntu 操作系统中安装 Docker,以及 Proxy 和 Insecure Registry 的配置. 本 ...
- Docker实战 (docker swarm的应用,docker集群的构建,在docker集群中部署服务)
Docker实战 ----docker swarm的应用,docker集群的构建,在docker集群中部署服务 转载来源:https://blog.csdn.net/No_red/article/de ...
- python docker自动化_「docker实战篇」python的docker爬虫技术-移动自动化控制工具安卓ADB的使用(15)...
原创文章,欢迎转载.转载请注明:转载自 IT人故事会,谢谢! 原文链接地址: 「docker实战篇」python的docker爬虫技术-移动自动化控制工具安卓ADB的使用(15) adb(Androi ...
- 「docker实战篇」python的docker爬虫技术-在linux下mitmproxy介绍和安装(四)
原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:「docker实战篇」python的docker爬虫技术-在linux下mitmproxy介绍和安装(四) 上次说了fiddl ...
- 【云原生之Docker实战】使用Docker部署Lsky Pro个人图床平台
[云原生之Docker实战]使用Docker部署Lsky Pro个人图床平台 一.Lsky Pro介绍 1.Lsky Pro简介 2.Lsky Pro特点 二.检查宿主机系统版本 三.检查本地dock ...
- 【云原生之Docker实战】使用docker部署DokuWiki知识库系统
[云原生之Docker实战]使用docker部署DokuWiki知识库系统 一.DokuWiki介绍 二.检查本地Docker环境 1.检查系统版本 2.检查docker版本 3.检查docker状态 ...
- 【云原生之Docker实战】使用Docker部署Snipe-It固定资产管理平台
[云原生之Docker实战]使用Docker部署Snipe-It固定资产管理平台 一.Snipe-It介绍 二.检查本地docker环境 1.检查docker版本 2.检查docker状态 3.检查系 ...
- 【云原生之Docker实战】使用Docker部署ShowDoc文档工具
[云原生之Docker实战]使用Docker部署ShowDoc文档工具 一.ShowDoc介绍 1.ShowDoc简介 2.ShowDoc功能 二.检查docker版本 三.检查docker状态 四. ...
- 【云原生之Docker实战】使用Docker部署Mindoc文档管理平台
[云原生之Docker实战]使用Docker部署Mindoc文档管理平台 一.Mindoc介绍 1.Mindoc简介 2.Mindoc功能 二.检查宿主机系统版本 1.检查操作系统版本 2.检查系统内 ...
最新文章
- 汉川一中2021高考成绩查询,2021年汉川市高考状元名单资料,今年汉川市高考状元多少分...
- 10.4 实现关系下的匿名内部类
- Java多线程(3)—生产者/消费者
- C# 操作其他进程ListView
- 超级智能玩具《小小机器人》首发|全新50种玩法,创造力之源
- VMware 报错“Intel VT-x处于禁止状态”
- C语言 变量声明和定义的区别
- javaWeb回忆思维导图
- python产品缺陷检测_3 Kaggle钢材表面缺陷检测竞赛的探索与实践-阿里云开发者社区...
- 灵格斯与word2007或2010冲突,复制时word关闭问题的解决
- 苹果推史上最便宜iPhone,在于恐惧中国手机持续抢夺市场
- 并查集——NUIST OJ P1648 炼丹术为例
- ARM Cortex A7 架构简介
- Linux——shell练习题01
- CPU性能优化:Cache
- 无推广无刷榜挺进苹果商店AppStore收费榜总榜排行前10!
- 零基础学唱歌到底需要学习哪些内容?
- Android media sistem,App Store 上的“Николай Стариков. Библиотека”
- 基于WebApp的服装个性化定制订单管理系统
- Error:default argument given for parameter 2 of……