Docker
一、开启环境(连接FinalShell)
新建连接
登陆成功界面:
之前用的centos8,现在版本centos7.6:
https://blog.csdn.net/gghhhh7/article/details/106994603?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.compare&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.compare
参考博客:
https://blog.csdn.net/han_zhuang/article/details/106792385
二、Docker VS 虚拟机
虚拟机:虚拟机运行的是一个完整的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多。包含系统内核、lib、app等,相对更加重量级
虚拟机的缺点:
· 资源占用多
· 冗余步骤多
· 启动慢
两者的不同:
· 传统虚拟机会虚拟出一个硬件,运行一个完整的操作系统,然后再这个系统上安装和运行环境
· Docker内的容器直接运行在宿主机的内核上,容器自己是没有内核的,也没有虚拟硬件
· 每个容器间是相互隔离的,每个容器都有自己的文件系统,相互隔离
1)镜像(image)
docker镜像就是一个只读模板,比如,一个镜像可以包含一个完整的centos,里面仅安装apache或用户的其他应用,镜像可以用来创建docker容器,另外docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用
2)容器(Container)
docker利用容器来运行应用,容器是从镜像创建的运行实例,它可以被启动,开始、停止、删除、每个容器都是互相隔离的,保证安全的平台,可以把容器看做是要给简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行再其中的应用程序
3)仓库(repostory)
仓库是集中存储镜像文件的地方,registry是仓库主从服务器,实际上参考注册服务器上存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)
仓库分为两种,公有仓库,和私有仓库,最大的公开仓库是docker Hub,存放了数量庞大的镜像供用户下周,国内的阿里云,这里仓库的概念与Git类似,registry可以理解为github这样的托管服务
1.定义
Docker 是一个开源的应用容器引擎, Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 或Windows机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。
docker官网:https://www.docker.com/
docker文档:https://docs.docker.com/
docker hub:https://hub.docker.com/
2.优点
(1)效率高
(2)可移植性强
(3)在同一硬件上运行更多工作负载
3.安装
参考:https://docs.docker.com/engine/install/centos/
1.卸载旧版本docker
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
2.安装需要的安装包/安装相关工具
yum install -y yum-utils
3. 设置镜像的仓库/设置docker下载地址
yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo#国外镜像不推荐
yum-config-manager \ --add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #阿里云镜像 推荐
4.更新yum软件包索引
yum makecache fast
5.安装docker相关引擎/ce是社区版,ee是企业版
yum install docker-ce docker-ce-cli containerd.io
6.启动docker
systemctl start docker
7.测试docker
docker version
8.测试hello world
docker run hello-world
出现即成功!!!
docker run hello-world的运行流程:
9.查看镜像
docker images
了解:
卸载docker
/#1、卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
/#2、删除资源
rm -rf /var/lib/docker
4.阿里云镜像配置
(1)将阿里云镜像文件复制到/etc/docker目录下
(2) 重启docker
service docker restart
5.Docker基本使用
1、底层原理
Docker是一个C/S架构的系统,Docker的守护进程运行在主机上,可以通过Socket从客户端进行访问,Docker-Server可以接收Docker-Client的指令并执行。
帮助命令
docker version # 显示docker的版本信息
docker info # 显示docker的版本信息
docker 命令 --help # 查看相关命令的说明
docker命令的官方文档:https://docs.docker.com/reference/
镜像常用命令
(1)docker images:列出本地镜像
(2) docker search:从Docker Hub查找镜像
语法1:docker search tomcat
语法2:docker search -s 30 tomcat
--automated :只列出 automated build类型的镜像;
-s :列出收藏数不小于指定值的镜像。
(3) docker pull:从镜像仓库中拉取或者更新指定镜像
语法: docker pull tomcat等价于docker pull tomcat:latest
语法:docker pull tomcat
(4) docker rmi -f xxx
docker rmi : 删除本地一个或多少镜像。
-f :强制删除;
语法:docker rmi -f hello-world
6.容器常用命令
(1) 新建并启动容器--交互式窗口
docker run [OPTIONS] IMAGES [COMMAND] [ARG...]
案例1:
docker run -it 镜像ID
案例2:
docker run -it --name mycentos centos
--name="nginx-lb": 为容器指定一个名称;
使用docker镜像centos以后台模式启动一个容器,将容器命名mycentos 。
Ctrl+C:退出
此时已在容器里面,docker命令不能使用。且root后面的从之前的系统变成了新的字符串;用Linux的ls命令可以查看:
(2)列出当前所有正在运行的容器
docker ps[OPTIONS]
(2) 退出容器
右击:复制标签,再输入:
(1) exit
使用docker exec -it 82d3a39baebf /bin/bash命令的话,退出容器依然状态不变,用docker run -it --name mycentos001 centos才可以。或者使用stop命令
步骤:
(1)在1.Ali中:docker run -it --name mycentos001 centos
(2)在新的终端2.Ali:docker ps -a ==》查看容器的状态为UP已启动。
(3)在1.Ali退出容器:exit
(4)在新的终端2.Ali:docker ps -a ==》查看容器的状态已关闭
容器停止退出
(3) Ctrl+P+Q
步骤同上(2)
容器不停止退出
使用docker exec -it xxx /bin/bash的错误命令:
在1.Ali中输入docker ps -a查看运行状态为UP的centos,
再docker start xxx启动容器
然后docker exec -it xxx /bin/bash
最后再2.Ali中输入docker ps -a查看centos的状态依然是UP。
(3)案例:
docker pull centos
docker run -it --name mycentos0809 centos
exit或者ctrl+P+Q
(4) 启动容器:
docker start 容器ID或者容器名
停止容器用stop:
(5) 删除容器:
不能删除已启动的容器:
docker rm 容器ID
删除所有容器:
docker rm -f $(docker ps -a -q)
(6) 进入容器
进入容器后使用Linux命令,exit或者Ctrl+p+q可以退出,但是不关容器状态的事。
docker exec -it 容器ID /bin/bash
rm -rf webapps
mv webapps.dist webapps
(7) 启动容器--守护式窗口
进去并退出容器
docker run -d centos
7. docker commit
docker commit
提交容器副本使之成为一个新的镜像
语法:
docker run -it -p 8080:8080 tomcat
[
-p 主机端口:docker容器端口
-P 随机分配端口
i 交互
t 终端
]
案例1:从Hub上下载tomcat镜像到本地并成功运行
docker run -it -p 8888:8080 tomcat
docker commit -a='sunhao' -m='del docs' dd1e6b2b9cf7(正在运行的容器ID) kgc/tomcat
附注:a为作者,m为注释
8. 案例1--Docker安装mysql
(1) docker pull mysql:5.6
(2)
docker run -p 3306:3306--name mysql -v /kgc/mysql/conf:/etc/mysql/conf.d -v /kgc/mysql/logs:/logs -v /kgc/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
密码是123456,连接Navicat时候用
-p 3306:3306:端口映射时候用到,否则Navicat连接不上
-v /kgc/mysql/conf:/etc/mysql/conf.d:挂载,把主机的文件夹/kgc/mysql/conf挂载到mysql容器的/etc/mysql/conf.d文件夹里面
(3) docker ps或者docker ps -a
(4) docker exec -it 容器id /bin/bash
(5) 修改阿里云安全组
(6) 测试
9.案例2--Docker安装Redis
(1)docker pull redis:3.2
(2)
docker run -p 6379:6379 -v /kgc/myredis/data:/data -v /kgc/myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf -d redis:3.2 redis-server /usr/local/etc/redis/redis.conf --appendonly yes--requirepass "123456"
(3)vim /kgc/myredis/conf/redis.conf/redis.conf
(5) 阿里云添加安全组策略
(6) 测试
10.Springboot微服务打包成Docker镜像
思路:
(1)构建springboot项目
(2)打包应用
(3)编写dockerfile
(4)构建镜像
(5)发布运行
(1)创建springboot项目(勾选Spring Web)
(2)写个controller测试类
@RestController
public class HelloController{
@RequestMapping("/hello")
public String hello(){
return "hello,kgc";
}
}
(3) package生成jar包
(4) 在当前目录中,cmd,输入java -jar demo-xxxx.jar
(5) 右击工程,创建Dockerfile
内容:
FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
(6)创建目录,并上传jar包和Dockerfile文件到目录上。
docker build -t demo_kgc .
创建Dockerfile文件后,把其删掉,再把我们自己项目的生成的jar包和Dockerfile文件拉到该dockerapp目录下:
(6) docker images
(7) docker run -d -P --name 工程名 demo_kgc
(8) docker ps
curl localhost:327xx,根据自己电脑生成的5位随机数而定:测试是否通
(9) 测试请求:curl localhost:32779/hello
运行结果和controller层的一样:
11.docker安装portainer
(1)远程拉取portainer
docker pull portainer/portainer
(2)查看镜像
docker images
(3)构建并运行portainer镜像
docker run -d --name portainer -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /data/portainer_data:/data 镜像id
12.通过docker部署tomcat
1.先拉取一个tomcat:7
步骤:1:docker run -it -p 8080:8080 tomcat
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
步骤2:新开一个终端并进入:docker exec -it 容器ID /bin/bash
docker exec :在运行的容器中执行命令
步骤3:修改tomcat默认配置,执行两个命令:
rm -rf webapps
mv webapps.dist webapps
在阿里云服务器中设置网络安全组。
在阿里云服务器添加一个8080端口:
直接访问tomcat
喜欢前端、后端java开发的可以加+qun:609565759,有详细视频、资料、教程,文档,值得拥有!!!希望可以一起努力,加油ヾ(◍°∇°◍)ノ゙!!!