Docker的学习笔记(开发的技术分享转发)
我的Docker学习记录
一、安装docker
yum install -y docker-io
二、使用docker
1、下载镜像
docker pull <image>
2、查询镜像
docker search <image>
3、从镜像运行容器
docker run -it --name <name> <image> /bin/bash
4、后台运行
docker run -itd --name <name> <image> /bin/bash
5、查看docker运行的容器
docker ps
6、查看docker上一个运行的容器
docker ps -l
7、查看docker运行的全部容器
docker ps -a
8、进入docker的方法有两种exec和attach
第一种exec
docker exec -it <container> /bin/bash
container既可以是容器id也可以是容器名字
/bin/bash为运行容器时的环境
第二种attach
docker attach -it <container> /bin/bash
和exec同理只不过用该命令连接容器后,退出是容器会自动关闭。
9、删除容器
docker rm <container>或者是<container-id>
10、删除镜像
docker rmi <image-id>
11、列出已有镜像
docker images
12、将docker里面的文件或目录拷贝出来
docker cp <container_id>|<container_name>:path path
例子:
docker cp tomcat:/usr/local/tomcat/conf .
13、导入导出镜像和容器
docker save image-id > image.tar 导出镜像
docker export container-id > container.tar 导出容器
docker load < image.tar 导入镜像
cat container.tar | docker import - container_name:tag 导入容器
三、实战
1、安装ssh服务
debian系统
apt-get update
apt-get -y install openssh-server
2、安装netstat命令
apt-get -y install net-tools
3、安装jdk服务
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie"
http://download.oracle.com/otn-pub/java/jdk/8u111-b14/jdk-8u111-linux-x64.tar.gz
4、安装tomcat服务
wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.9/bin/apache-tomcat-8.5.9.tar.gz
tar xzvf apache-tomcat-8.5.9.tar.gz -C /usr/local/ && mv /usr/local/apache-tomcat-8.5.9 /usr/local/tomcat
cp -r apache-tomcat-8.5.9.tar.gz /usr/local/tomcat
四、工作流程
1、构建镜像。
2、上传镜像到已有的私有仓库或者公有仓库。
3、在指定服务器上下载指定仓库的镜像。
4、通过镜像运行容器,指定端口、容器名称、挂载点、需要的环境变量等参数。
5、通过jekens自动化运行脚本,将指定的文件定时更新到挂载点,完成自动部署。
五、Docker服务标准
1、容器命名规则
服务名称-应用名称-端口号
例如:
2、挂载目录
1)在root目录下创建docker目录
mkdir /root/docker
2)在docker目录下创建对应容器的目录名称
例:还是以上面的tomcat-admin-8280为例
mkdir -p /root/docker/tomcat-admin-8280
3)在tomcat-admin-8280目录下创建该容器内所需的挂载点目录
例如tomcat需要日志和app文件的挂载点
创建log的挂载点
mkdir -p /root/docker/tomcat-admin-8280/logs
创建app文件的挂载点
mkdir -p /root/docker/tomcat-admin-8280/webapps
如果有其他的配置文件需要修改也可以增加配置文件等其他挂载点
4)tomcat日志统一挂载在/var/log/下
在/var/log下新建自己对应名字的目录
例如tomcat-admin-8280这样的目录
六、docker镜像内需要的基础服务
1、ssh服务
用来进行外部链接
2、ntp服务
用来同步时间
3、vim服务(配置支持中文显示)
用来方便编辑
七、镜像构建标准
1、创建Dockerfile
在root下创建和镜像名一样的目录
例:
mkdir -p /root/dockerfile/tomcat
cd /root/dockerfile/tomcat
touch Dockerfile
编辑配置Dockerfile
例如:
2、在该目录下放置所以Dockerfile所需要的脚本和文件
例如:
3、构建镜像
进入Dockerfile所在目录
cd /root/dockerfile/tomcat
运行构建命令
docker build -t <image-name>:<tag> path
例如:
docker build -t tomcat:8.5.9 /root/dockerfile/tomcat/
八、docker占用磁盘空间过大的解决方案
通过命令可以观察到/var/lib/Docker目录很大,我的主机只有20G,这个目录占了 18G;原因是devicemapper的空
间设的太大,通过docker info打印的Data Space Total参数可以看到,默认是107.4G
思路如下:
备份当前容器、镜像;
删除/var/lib/docker目录;
使用dd命令重设大小;
恢复容器、镜像
1、备份当前的容器和镜像
docker save image-id > image.tar 导出镜像
docker export container-id >container.tar 导出容器
2、删除docker目录
/etc/init.d/docker stop
rm -rf /var/lib/docker
3、使用dd命令重设大小
mkdir -p /var/lib/docker/devicemapper/devicemapper/
touch /var/lib/docker/devicemapper/devicemapper/data
dd if=/dev/zero of=/var/lib/docker/devicemapper/devicemapper/data bs=1M count=0 seek=8192
建立的文件最大为1M*8192=8G
启动docker
/etc/init.d/docker start
docker info 查看Data Space Total是否修改成功
4、恢复容器和镜像
docker load < image.tar 导入镜像
cat container.tar | docker import - container_name:tag 导入容器
九、docker内tomcat打印的日志时间和服务器时间差8个小时的问题
打开tomcat文件下的bin/catalina 文件,找到JAVA_OPTS,在设置中增加-Duser.timezone=GMT+08:
JAVA_OPTS='-Xms256m -Xmx800m -Duser.timezone=GMT+08'
十、安装使用swarm
在所有节点上
docker pull swarm
在使用Swarm进行集群管理之前,需要先把准备加入集群的所有的节点的docker deamon的监听端口修改为
0.0.0.0:2375,可以直接使用sudo docker –H tcp://0.0.0.0:2375 &命令,也可以在配置文件中修改
$ sudo vim /etc/default/docker
在文件的最后面添加下面这句
D0OCKER_OPTS="-H 0.0.0.0:2375 –H unix:///var/run/docker.sock"
service docker restart
第一步
在任何一个节点上面执行swarm create命令来创建一个集群标志。这条命令执行完毕之后,swarm会前往Docker Hub上
内建的发现服务中获取一个全球唯一的token,用以唯一的标识swarm管理的Docker集群。
docker run --rm swarm create
返回的token是d947b55aa8fb9198b5d13ad81f61ac4d,这个token一定要记住,因为接下来的操作都会用到这一个token。
第二步
在所有的要加入集群的机器上面执行swarm join命令,把机器加入集群。
本次试验就是要在所有的三台机器上执行命令。
docker run –-rm swarm join –addr=ip_address:2375 token://d947b55aa8fb9198b5d13ad81f61ac4d
执行这条命令后不会立即返回 ,我们手动通过Ctrl+C返回
第三步
启动swarm manager。
因为我们要让sclu083充当Swarm管理节点,所以我们要在这台机器上面执行swarm manage命令
docker run -d -p 2376:2375 swarm manage token://d947b55aa8fb9198b5d13ad81f61ac4d
重点内容需要注意的是:在这条命令中,第一:要以daemon的形式运行swarm;第二:端口映射:2376可以更换成任
何一个本机没有占用的端口,一定不能是2375,否则就会出问题。
查看所有节点
docker run --rm swarm list token://d947b55aa8fb9198b5d13ad81f61ac4d
docker –H 10.13.181.83:2376 info
可以查看所有节点的信息
info命令可以替换成所有docker的其他命令
十一、永久解决中文乱码问题
在Dockerfile中添加一行
ENV LANG C.UTF-8
Docker的学习笔记(开发的技术分享转发)的更多相关文章
- AY的Dapper研究学习-继续深入-C#开发-aaronyang技术分享
原文:AY的Dapper研究学习-继续深入-C#开发-aaronyang技术分享 ====================www.ayjs.net 杨洋 wpfui.com ...
- AY的Dapper研究学习-基本入门-C#开发-aaronyang技术分享
原文:AY的Dapper研究学习-基本入门-C#开发-aaronyang技术分享 ====================www.ayjs.net 杨洋 wpfui.com ...
- golang学习笔记17 爬虫技术路线图,python,java,nodejs,go语言,scrapy主流框架介绍
golang学习笔记17 爬虫技术路线图,python,java,nodejs,go语言,scrapy主流框架介绍 go语言爬虫框架:gocolly/colly,goquery,colly,chrom ...
- Docker Stack 学习笔记
该文为<深入浅出Docker>的学习笔记,感谢查看,如有错误,欢迎指正 一.简介 Docker Stack 是为了解决大规模场景下的多服务部署和管理,提供了期望状态,滚动升级,简单易用,扩 ...
- Docker&K8S学习笔记(一)—— Docker安装
最近一年在工作上经常使用Docker与K8S,除了利用其打镜像,部署服务外,还基于Docker与K8S开发了一套CICD流水线平台,为了加深相关知识点的理解,所以从今天开始会定期更新学习笔记,本套学习 ...
- 微信小程序开发——小程序分享转发
关于小程序的转发: 最简单的就是点击小程序右上角菜单“转发”按钮直接分享,不过这种分享有点不太友好,实用性也不强. 当然,你可以自定义分享内容,包括标题,简介,图片及分享的小程序页面路径. 再高级一点 ...
- 字节跳动内部微服务架构-Docker实战学习笔记分享 真香
前言 基于 Spring Cloud 的微服务设计和开发,已经越来越多地得到了更多企业的推广和应用,而 Spring Cloud 社区也在不断的迅速发展壮大之中,近几年时间,Spring Cloud ...
- Docker原理(开发技术分享转发)
Docker原理Docker是啥Docker是一个程序运行.测试.交付的开放平台,Docker被设计为能够使你快速地交付应用.在Docker中,你可以将你的程序分为不同的 基础部分,对于每一个基础部分 ...
- docker容器学习笔记
docker是通过内核虚拟化技术来提供容器的资源隔离与安全保障. docker组成: docker client.docker server.docker组件(镜像(image).容器(contain ...
随机推荐
- [.net 多线程]Barrier
当需要[一组任务]并行地运行一连串的阶段,但是每一个阶段都要等待所有他任务完成前一阶段之后才能开始,可以通过Barrier实例来同步这一类协同工作.Barrier初始化后,将等待特定数量的信号到来,这 ...
- 「BZOJ 2152」聪聪可可
题目链接 戳这 \(Solution\) 这道题看起来就像点分治对吧.没错就是点分治. 什么是点分治 如果你不会点分治,可以去看看这儿 现在看到这里,首先确保你已经会了点分治,如果不会你还往下看,听不 ...
- CHNetRequest网络请求
Paste JSON as Code • quicktype 软件的使用 iOS开发:官方自带的JSON使用 JSON 数据解析 XML 数据解析 Plist 数据解析 NetRequest 网络数据 ...
- bzoj1798维护序列
题目链接 暴力数据结构之线段树$qwq$ 裸题直接敲板子 忘了啥时候写的了$qwq$ 直接上代码吧 /************************************************* ...
- Java面向对象之内部类(匿名内部类)
一.基础概念 匿名内部类:简化书写的内部类.其实匿名内部类就是一个子类对象. 前提:内部类需要继承或者实现外部的类或者接口. 格式:new 父类或者接口(){定义子类的内容} 二.将内部类定义到局部的 ...
- cnd 计费流量查询服务模块设计与实现
一.cdn模块结构: 2.内部模块结构:
- (C/C++) Link List - C 語言版本
基本Link List 用C語言實現 先附上標頭檔 /** * @author Chen-Hao Lin * @email westgate.skater@gmail.com * @website h ...
- Linux 使用echo向文件末尾追加命令
//echo后边用单引号包围要添加的内容 echo 'add content'>>/home/data/test.sh 注意>>表示在原来的文件末尾上进行追加,如果使用的是&g ...
- 洛谷P2679 子串
放题解 题目传送门 放代码
- redis中使用lua脚本
lua脚本 Lua是一个高效的轻量级脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能 使用脚本的好处 1.减少网络开销,在Lua脚 ...