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(守护模式启动)
    -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 cp 容器ID:容器内部路径  宿主机路径 

image-20200320160140836

Docekr镜像

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

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

容器数据卷

  • 数据卷

# 空间映射(对应的文件夹会自动创建)
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<[email protected]>
#把宿主机当前上下文的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

Tomcat

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

微服务架构

要解决的问题

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

缺点

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

image-20200320221147519

image-20200320221302229

共享数据库

image-20200320221404313

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

image-20200320221553778

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

原创文章 116 获赞 207 访问量 66万+

猜你喜欢

转载自blog.csdn.net/sexyluna/article/details/105012598