安装
- 如果已经换好的国内的源
- 可以直接跑
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:容器内部路径 宿主机路径
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添加
- 手动编写dockerFile文件
- docker build命令执行得到自定义定向
- run
- docker镜像构建文件的脚本
dockerFile解析过程
dockerFile保留关键字
自建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外部连接
[注意端口]
加速
-
查看是否配置成功:运行
docker info
Tomcat
- Tomacat的webapps里面没有文件,需要将webapp.dist文件复制到webapps里面
微服务架构
要解决的问题
- 实现敏捷开发
- 持续部署
缺点
- 服务体系结构复杂
- 服务与服务之间通过网络通信沟通
共享数据库
如果某一个服务想要修改数据库表结构,需要和其它部门沟通扯皮,导致效率下降
微服务有自己的数据库,进行封装,对外只开放API