Docker
vmvare 虚拟机:
-
虚拟机是先给我们虚拟出来一堆硬件环境,然后再虚拟出来的硬件环境中去虚拟出来一个系统,这些虚拟出来的硬件是从我们的计算机中的硬件中划分出来的 ,不是真实存在的
-
在这个虚拟出来的硬件上面我们可以装应用
虚拟机架构
全虚拟化架构图
OS层的虚拟化架构(Docker属于这种)
硬件层虚拟化
Docker属于一个Cs的架构,必须是安装到linux上的,所以就需要一个虚拟机来操作了
-
注册中兴:
这个就是一个服务器,储存各种资源 -
宿主机:
docker引擎主要安装在linux下,所以需要一个linux的虚拟机做载体系统,比如ip为:192.168.19.364的linux系统 -
镜像文件:
类似于app的安装文件 apk文件,需要安装才能运行 -
创建容器:
docker容器是一个镜像的执行体,一个镜像文件可以创建多个不同的容器,每个容器独立运行类似于apk文件执行安装程序,安装好之后才能使用,安装好的容器中包括可以直接运行的软件,比如mysql\nginx\tomcat\redis甚至可以在容器中在安装一个操作系统centos 安装好的容器,具有独立的ip,和宿主机的ip不是同一个ip,类似于在宿主机上又安装了一个独立的子虚拟机,只不过这个字虚拟机只安装了指定的某一个软件,比如一个tomcat容器,就相当于一台只安装了一个tomcat的子虚拟机 同一个宿主机的docker引擎下的的各个容器,相当于局域网内的若干台机器
Docker的环境
Docker的安装
docker的常用命令
-
docker客户端的安装
yum install docker -
安装后查看版本
docker -v -
systemctl
systemctl 命令是系统管理器指令,它是service和chkconfig两个命令的组合 -
启动
systemctl start docker -
停止
systemctl stop docker -
重启
systemctl restart docker -
查看docker状态
systemctl status docker -
帮助:
docker–help -
centos7 关闭防火墙
systemctl stop firewalld.service -
禁止开机自启
systemctl disable firewalld.service
Docker 镜像的操作
- Docker镜像修改服务商
(1)vi /etc/docker/daemon.json
(2)在该文件中输入如下内容:输入“i”进入编辑,并将以下文本复制到daemon.json中,“i”就是"insert"的首字母。
{
“registry-mirrors”: [“https://docker.mirrors.ustc.edu.cn”]
}
(3)重启docker
systemctl restart docker
镜像的常用操作
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
注意:带[ ] 的表示可以没有,其中默认仓库地址是 Docker Hub, 标签默认为latest。
-
拉取镜像文件
docker pull redis -
搜索镜像文件
docker search redis -
查看镜像文件
查看镜像文件的详情:
docker images
查看镜像文件的id:
docker images -q
删除单个镜像文件:
docker rmi{镜像id}
删除所有的镜像文件:
docker rmidocker images -q
: 注意删除容器的时候容器必须是退出的状态
查看容器的命令
-
查询所有的容器(a :all)
docker ps -a -
查询正在运行的容器
docker ps -
查询最后一次运行的容器(l :last)
docker ps -l
创建容器的常用的命令
-
创建容器命令:
docker run -
参数说明:
-i :
表示运行容器-t : 表示容器运行后进入容器, -it: 表示运行并且进入到该容器,即分配一个伪终端 --name: 表示为创建的容器命名: 注意: 只有命名才有两个- -v: 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用过个-v做多个或文件映射.注意:最好做目录映射,在宿主机上做修改,然后共享到容器上 -d: 在run后面加上-d参数则会创建一个守护式的容器在后台运行(这样创建容器后不会自动登录容器),如果只加-i-t两个参数,创建后就会进入到容器中 -p: 表示端口映射,前者是宿主机端口,后者是容器内的映射端口,可以使用多个-p做多个端口映射
docker下部署应用
应用安装
docker pull redis
docker pull mysql
docker pull nginx
docker pull tomcat
查看镜像文件
docker images
Docker容器操作
将镜像->容器化
类似于安装软件的过程
-
容器化后,会在docker客户端环境中生成一台虚拟机(ip),虚拟机中,有安装好的软件可以使用
-
如果做了多个容器,每一个容器,都是一台虚拟机,这样在docker的环境下,就形成了docker内部的局域网
查看容器的路径
部署Tomcat应用
# 在docker下部署Tomcat应用
1. 拉去tomcat镜像
docker pull tomcat
2. 创建tomcat容器
docker run -id --name=mytomcat -p 8000:8080 tomcat:latest
-id: 创建一个守护式容器
--name : 命名
-p: 端口映射 宿主机 的端口和内部的tomcat的端口的映射
tomcat:latest : 指定版本
3. 进入tomcat容器
docker exec -it mytomcat /bin/bash
4. 将静态资源复制到tomcat容器的webapps文件夹下
1. alt+p 进入写入的命令
2. put -r e:\temp_file\portal
3. docker cp portal mytomcat:/usr/local/tomcat/webapps
5. 访问tomcat资源
访问到8000/portal/index.html 就可以
部署Redis应用
# 部署redis应用
1. 拉取镜像
docker pull redis
2. 创建redis守护式容器
docker run -id --name=myredis -p 6379:6379 redis
3. 存取值
redis-cli -h 192.168.92.132
set
put
部署mysql
# 部署mysql
1. 拉去mysql镜像
docker pull mysql
2. 运行一个守护式的mysql容器,并且给mysql的root用户设置密码
docker run -id --name=myselfsql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
3. 进入到mysql容器中
docker exec -it myselfsql /bin/bash
4. 登录mysql
mysql -uroot -p123456
5. 通过navicat连接到mysql
镜像的备份和迁移
# 容器保存为镜像
* 命令
docker commit mytomcat imgmytomcat
mytomcat: 容器的名字
imgmytomcat: 镜像的名字
# 镜像备份
* 备份:
docker save -o imgmytomcat.tar imgmytomcat
-o: 输出
imgmytomcat.tar: 备份后的名字
imgmytomcat:需要备份的镜像的名字
* 删除之前的镜像
docker rmi 镜像的id
* 重新导入镜像文件
docker load -i 镜像的tar包
Docker 查看日志文件
tail -f /var/log/messages
Docker 部署java 应用
1. 首先 要有一份dockerFile文件:
# 使用jdk 多少的版本
FROM openjdk:11
COPY *.jar /app.jar
# 运行的端口号
CMD ["--server.port=8080"]
EXPOSE 8080
# 容器的时间
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone
ENTRYPOINT ["java","-jar","/app.jar"]
# ENTRYPOINT:docker启动时,运行的命令,这里容器启动时直接运行jar服务。
2. 其次把java 项目打包为jar 包
3. 在linux 中创建相同的文件夹: forexample ---> /docker/java
4. 把dockerFile 和jar 包 cp 到 /docker/java 中去
5. 使用 docker build -t docker-test-java-images . ( 后面有个. 一定要有 -t 打包的镜像的名称)
6. 上面步骤会生成一个唯一id 的镜像文件
7. 使用 docker run -d --name docker-java-service -p 8080:8080 -v /docker/java/logs/:/logs/ 983331b1aeeb
8. 第七步表示的是 -v 表示文件的映射 前面的是linux 宿主机的目录,映射到docker 容器内部的/logs 的目录中去
9. ---- 如果重新部署docker 的java
10. 需要先停掉 的容器
11. docker ps
12. docker stop 容器id
13. docker rm 容器id
14. 然后把打包好的jar 包上传到 /docker/java的目录下
15. 然后使用上面5-7 的命令
Docker 部署sftp 应用
docker 部署sftp:
docker run --name zk-sftp -v /zk-images/upload:/home/admin/upload -p 2222:22 -d atmoz/sftp admin:admin123456:1001
-v 挂载到指定的目录下 ,:/home/admin/upload 这个是sftp 默认会根据用户名 admin 生成的文件默认上传的路径,/zk-images/upload 这个是linux 宿主机的目录
admin:admin123456:1001 用户名/密码/用户id
-p 端口映射
部署之后 用户对于文件的操作权限 是没有赋予的。
所以需要赋予用户权限
1、docker exec -it 容器的id bash
2、 cd home/admin
3、ls -la
4、赋予权限 chmod 777 upload/ -R
Docker 重启的时候 容器也重启
容器还没有创建,在运行容器的时候加入–restart=always参数
docker run -id --restart=always -p 9999:9999 -v redis
容器已经运行了
docker update --restart=always 容器名称或者容器id
想停止重启
docker update --restart=no 容器名称或者容器id