docker虚拟化容器技术学习笔记

安装

官网Ubuntu安装教程

  • 如果已经换好的国内的源
  • 可以直接跑sudo apt-get install docker-ce docker-ce-cli containerd.io来进行安装
  • 否则需要去 官网配置源/换国内源

本文是学习过程留下来的笔记。适合学习过了的人查看!


Docker

镜像命令

docker images
docker image -q
docker image -a
docker iamge -qa

# 寻找xxx某镜像
docker search  xxx
# 点赞数超过30
docker search -s 30 xxx
# 显示xxx完整镜像描述
docker search --no-trunc xxx

# 下载镜像
docker pull xxx:3.2
# 等价与
docker pull xxx == docker pull xxx:latest(默认)
# 
 
#删除单个镜像
docker rmi xxx:6.6
docker rmi xxx == docker rmi xxx:latest
# 强制删除
docker rmi -f xxx
# 删除多个镜像
docker rmi -f xxx1:version xxx2:version
# 删除全部
docker rmi -f $(docker iamge -qa)



容器命令

  • 有镜像才能创建容器
  • 容器可以看作是一个仅包含runtime的linux操作系统
    在这里插入图片描述
# 拉一个centos系统下来
docker pull centos
#  创建并启动容器
    docker run [option] IMAGE [command][args]
    # 一些参数的解释
    -d :后台运行容器,并返回容器ID(守护模式启动)detached
    -i :交互模式运行容器
    -t :重新分配一个伪终端
    -P : 随机端口映射	(这个P是大P)
    -p :指定端口映射	(这个p是小p)
    	ip:hostPort
    	ip::contanerPort
    	hostPort:contanerPort
    	containerPort
   docker run -it --name otherNmae(别名)	ImageID(镜像ID)
   
   
# 列出所有运行的容器(docker的进程)
docker ps
# 正在运行和曾经运行的
docker ps -a 
# 上一个运行的容器
docker ps -l
# 显示最近5个创建的容器
docker ps -n 5
# 只显示容器编号
docker ps -q


# 退出容器
exit
# 容器不停止退出
ctrl + p + q

# 启动容器
docker start 容器ID/容器名字
# 容器重启
docker restar 容器ID/容器名字

# 停止容器
docker stop 容器ID/容器名字
# 强制关闭
docker kill 容器ID/容器名字

# 删除已经停止的容器
docker rm 容器ID/容器名字 
# 批量删除容器
docker rm -f $(docker ps -a -q)
docekr ps -a -q | xargs docker rm


# 这个启动后查不到记录
docker run -d centos /bin/sh -c "while ture;echo hello;sleep 2;done "
# 查看容器日志
docker logs -f -t --tail 容器ID
-t  : 加入时间戳 
-f  : 跟随最新日志打印
--tail 数组 : 显示最后多少条


# 查看容器内运行的进程
docker top 容器ID	
# 查看容器内部的细节
docker inspect 容器ID


# 重新进入未关闭的容器
docker attach 容器ID
# 不进入容器,执行命令,结果打印到宿主机的控制台
docler exec -t 容器ID 命令
 
 docker attach 容易卡住,可以使用:
将 docker attach 容器ID命令改为 docker exec 容器ID /bin/bash

# 从容器内部拷贝文件到主机
docker cp 容器ID:容器内部路径  宿主机路径 

image-20200320160140836

Docekr镜像

  • 什么是镜像
    • 轻量级可执行的独立软件包
    • 包括 代码,运行时,库,环境变量
  • 联合文件系统 UnionFS
    • 类似图层似的文件系统,每次修改都生成一个图层,最终对外展现为一张图片而已。
  • 方便共享

# 提交容器副本,成为新的镜像
docker commit 
# 上传容器
docker commit -m="描述信息" -a="作者" 容器ID "要创建目标的镜像名:[标签 ]"
#  
# 将tomcat运行在8080端口,映射到宿主机的8088端口
docker run -it -p 8088:8080 tomcat

docker 日志

  • 查看日志
docker logs -f 容器ID/容器名

在linux上,一般docker的日志文件存储在/var/lib/docker/containers/container_id/ 目录下的 各个容器ID对应的目录下的*-json.log 文件中

二.设置Docker容器日志文件大小限制

1.新建/etc/docker/daemon.json,若有就不用新建了。添加log-dirver和log-opts参数,样例如下:

vim /etc/docker/daemon.json


root@iZ2ze99clzuka1844h9qy0Z:/etc/docker# cat daemon.json
{
  "registry-mirrors": ["https://e89utlc0.mirror.aliyuncs.com"]
  "log-driver":"json-file",
  "log-opts": {"max-size":"100m", "max-file":"3"}
}
  • max-size=500m,意味着一个容器日志大小上限是500M,
  • max-file=3,意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json。

2.然后重启docker的守护线程

命令如下:

systemctl daemon-reload
systemctl restart docker

容器数据卷

  • 数据卷

# 空间映射(对应的文件夹会自动创建)
docker run -it -v /宿主机绝对路径:/容器内路径 镜像名
# 查看数据是否挂在成功
# 容器和宿主机之间数据共享
# 容器停止退出后,主机修改后数据依旧同步,只需要再次启动容器即可。

# 带权限的命令 read only
docler run -it -v /宿主机绝对路径:/容器内路径:ro 镜像名
# 宿主机创建的文件,容器仅仅可以查看,不能写/改
  • 数据卷容器:实现数据的传输共享
    • dockerFile
# 写一个简单的dockerFlie
	# volume test
	FROM centos
	VOLUME ["/目录1""/目录2"]
	CMD echo "finished,----success1"
	CMD /bin/bash
	
	# 上述dockerFile等效与
	docker run -it -v /目录1 -v /目录2 centos /bin/bash

# 通过dockerFile构建镜像 
docker build -f /xxx/dockfile -t cds/name .

docker run -it cds/name

# 最后的运行效果是在docker中有二个目录一和目录二,自动映射到了宿主机的指定目录下的文件,与之对相应
docker run -it --name dc01
docker run -it --name dc02 --volumes-form dc01 cds/name
docker run -it --name dc03 --volumes-fomr dc01 cds/name
dc01 dc02 dc03 这三个容器共享文件夹
# 容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止	

dockerFile添加

  1. 手动编写dockerFile文件
  2. docker build命令执行得到自定义定向
  3. run
  • docker镜像构建文件的脚本

dockerFile解析过程

image-20200321133721366

image-20200321133856072

image-20200321133931869

image-20200321134055081

dockerFile保留关键字

image-20200321134644564

自建docekrFile

1.编写dockerFile

# 基层
FROM centos
# 环境变量
ENV mypath /usr/local
# 刚进来的工作路径
WORKDIR $mypath
# 跟随镜像下载安装下面二款软件
RUN yum -y install vim
RUN yum -y install net-tools
# 暴露80端口
EXPOSE 80
# 使用民工行
CMD echo #mypath
CMD echo "success-------"
CMD /bin/bash

2. 通过dockerFile构建镜像

docker build -f dockerFile的路径 -t 新镜像的名字:TAG .

3. 运行

docker run -it 新景象的名字:TAG

4. 列出镜像的变更历史

docekr history 镜像名

案例自定义tomcat

前期工作

# 创建文件夹
mkdir xxx/xxx/mydockerfile/tomcat9/
# 进入
cd xxx/xxx/mydockerfile/tomcat9/
# 创建文件
touch c.txt
# 将jdk和tomcat压缩包拷贝到层此处
cp /tomcat.tar.gz .
cp /jdk.tar.gz .
# 创建daockerFile文件
touch Dockerfile

Dockerfile

FROM         centos
MAINTAINER    zzyy<zzyybs@126.com>
#把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下
COPY c.txt /usr/local/cincontainer.txt
#把java与tomcat添加到容器中
ADD jdk-8u171-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.8.tar.gz /usr/local/
#安装vim编辑器
RUN yum -y install vim
#设置工作访问时候的WORKDIR路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_171
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.8
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.8
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器运行时监听的端口
EXPOSE  8080
#启动时运行tomcat
# ENTRYPOINT ["/usr/local/apache-tomcat-9.0.8/bin/startup.sh" ]
# CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-9.0.8/bin/startup.sh && tail -F /usr/local/apache

开始构建

docker build Dockerfile -t tomcat9_for_me .

开始运行

Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied

解决办法:在挂载目录后多加一个--privileged=true参数即可

doucker run -d -p 8080:8080 --name my_tomcat
-v /cds/tomcat9/test:/usr/local/apache-tomcat-9/webapps/test
-v /cds/tomcat/tomcat9logs/:usr/local/apache-tomcat-9/logs
--privileged=true
tomcat9_for_me

验证

去访问localhost:8080

发布工程

cd /tomcat/tomcat9/test
mkdir WEB-INFO
cd EWB-INFO
vim web.xml
cd ..
vim a.jsp
	

查验

localhost:9090/test/a.jsp

docker mysql

# 拉镜像
docker pull mysql
# 运行
docker run -p 12345:3306 --name mysql
-v /cds/mysql/conf:/etc/mysql/conf.d
-v /cds/mysql/logs:logs
-v /cds/mysql/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456
-d mysql
# 启动
docker exec -it "mysql容器ID" /bin/bash
# 登录
mysql -uroot -p
password:
# 数据库操作
create database db01;
use db01;
create table t_book(id int not null primary key,bookName barchar(20));
insert into t_bool values(1,'javaBooke');
select * from t_book

外部win10也连接运行在docker上的mysql服务

ifconfig
然后通过IP和username password外部连接
[注意端口]

加速

image-20200320164729067

上传

  • 登陆阿里云的dokcer托管服务
sudo docker login --username=156****6512 registry.cn-hangzhou.aliyuncs.com

Tomcat

  1. Tomacat的webapps里面没有文件,需要将webapp.dist文件复制到webapps里面

微服务架构

要解决的问题

  1. 实现敏捷开发
  2. 持续部署

缺点

  1. 服务体系结构复杂
  2. 服务与服务之间通过网络通信沟通

image-20200320221147519

image-20200320221302229

共享数据库

image-20200320221404313

如果某一个服务想要修改数据库表结构,需要和其它部门沟通扯皮,导致效率下降

image-20200320221553778

微服务有自己的数据库,进行封装,对外只开放API

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

早睡的叶子

你的鼓励就是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值