Docker是一个快速交付应用,运行应用的技术:
Docker可以解决大型项目依赖关系复杂,不同组件依赖的兼容性问题
Docker如何解决开发、测试、生产环境有差异的问题
docker和虚拟机的差异:
Docker架构主要有两个内容:镜像
和容器
镜像(Image):docker进应用程序及其所需依赖、函数库、环境、配置等文件打包在一起,称为镜像。
容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是docker会给容器做隔离,对外不可见
怎么进行镜像共享?可以通过Docker Rrgistry进行镜像共享
DockerHub:docker镜像托管平台。这样的平台称为Docker Rrgistry
首先需要大家虚拟机联网,安装yum工具
输入如下命令
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken
然后更新本地镜像源:
# 设置docker镜像源
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
然后输入命令进行安装:
yum install -y docker-ce
等待安装完成输入
docker-v
出现插图这表明安装成功
启动docker先关闭防火墙
# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
启动、停止、重启docker命令
systemctl start docker # 启动docker服务
systemctl stop docker # 停止docker服务
systemctl restart docker # 重启docker服务
镜像名称规范:
镜像名称一般分成两部分组成:【repository】:【tag】
案例1:从dockerHub中拉取一个Nginx进行并查看
1.首先去镜像仓库搜索Nginx镜像,比如
DockerHub
2.复制命令
docker pull nginx #默认拉取最新版本
拉取完成后查看镜像版本
docker images
案例2:利用docker save将nginx镜像导出磁盘,然后再通过load加载回来
步骤一:利用docker xx --help命令查看docker save,将其打包
从上面我们可以看到,假如把nginx镜像打包成一个压缩文件的命令为:
docker save -o nginx.tar nginx:latest
可以看到已经成功了,
接下来我们把原来的镜像给删除掉:
docker rmi nginx:latest
然后我们进行load --help命令查看load 操作命令,并加载出来
可以看出命令为:
docker load -i nginx.tar
可以看出已经成功被加载完成了
操作容器的命令
扩展:
docker logs -f [容器名称] #持续日志输出
案例1:创建运行一个nginx容器
步骤一:去docker hub 查看nginx的容器运行命令
命令:
输入docker run --name mynginx -p 80:80 -d nginx
接着我们访问宿主机的IP和端口
案例2:进入nginx容器,修改HTML文件内容,添加“chushay was best!”
步骤一:进入容器。进入到刚才创建的nginx容器命令
docker exec -it mynginx bash![在这里插入图片描述](https://img-blog.csdnimg.cn/6abf8bd70a1c44769d31d099aeca1a57.png)
然后我们去dockerhub找到nginx的路径
步骤二:进入nginx的HTML所在目录
/usr/share/nginx/html
cd /usr/share/nginx/html
步骤三:修改index.html的内容
sed -i 's#Welcome to nginx#chushay was best!#g' index.html
sed -i 's###g' index.html
修改之后,我们通过浏览器验证一下
我们可以看到已经修改成功!
创建并运行一个Redis容器,并支持数据持久化
步骤二:查看Redis镜像文档中的帮助信息
拉取镜像:
docker pull redis
步骤三:利用docker run ,命令运行一个Redis容器
#docker run --name some-redis -d redis redis-server --appendonly yes
docker run --name myredis -p 6379:6379 -d redis redis-server --appendonly yes
从上图中我们可以看出Redis镜像已经启动称为容器,接下来我们通过Redis连接工具来测试一下
我们可以看到,连接成功!
接下来,进入容器
docker exec -it myredis bash
进入Redis客户端
redis-cli
注 :可以直接进入到redis-cli: docker exec -it myredis redis-cli
添加一个key
set num 666
实践小操:
1.创建一个名为html的数据卷:
2.查看创建的数据卷:
docker volume ls
3.查看创建的数据卷路径:
docker volume inspect html
4.删除数据卷
删除未使用的卷
docker volume prune
删除指定的卷
docker volume rm [卷名]
案例1:
创建一个nginx容器,修改容器内的html目录内的index.html内容
创建容器并挂载数据卷
docker run --name mynginx -p 80:80 -v html:/usr/share/nginx/html -d nginx
修改html内容:
vi index.html
总结:
案例2:
创建并运行一个MySQL容器,将宿主机目录直接挂载到容器
步骤一:拉取MySQL镜像
docker pull mysql
mkdir -p mysql/data
mkdir -p mysql/conf
步骤三:把MySQL配置文件传到mysql/conf目录下
步骤四:去DockerHub查阅资料,创建并运行MySQL容器:要求:
①挂载/tmp/mysql/data到mysql容器内数据存储目录
②挂载/tmp/mysql/conf/hmy.cnf到mysql容器配置文件
③设置mysql密码
docker run --name mysql -e MYSQL_ROOT_PASSWORD=654321 -p 3306:3306 -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf -v /tmp/mysql/data:/var/lib/mysql -d mysql
docker run \ #启动
--name mysql \ #容器名称
-e MYSQL_ROOT_PASSWORD=654321 \ #mysql环境配置
-p 3306:3306 \ #mysql端口配置
-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \ #挂载/tmp/mysql/conf/hmy.cnf到mysql容器配置文件
-v /tmp/mysql/data:/var/lib/mysql \#挂载/tmp/mysql/data到mysql容器内数据存储目录
-d \ #允许后台运行
mysql #镜像名称
启动成功之后我们通过连接mysql数据库查看
镜像概念:镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成的整体。
总结:
镜像是分层结构,每一层称为一个Layer
Dcokerfile就是一个文本文件,其中包含一个个指令,用来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer
更多指令语法
案例1:基于Ubuntu镜像构建一个新镜像,运行一个Java项目
步骤一:新建一个空文件夹docker-demo
步骤二:拷贝课件资料中的docker-demo.jar文件到docker-demo这个目录
步骤三:拷贝课前资料中的jdk8.tar.gz文件到docker-demo这个目录
步骤四:拷贝课前资料提供的Dockerfile到docker-demo这个目录
步骤五:进入docker-demo
步骤六:运行命令
docker build -t javaweb:1.0v .
步骤一:新建一个空文件夹docker-demo
步骤二:拷贝课件资料中的docker-demo.jar文件到docker-demo这个目
步骤三:拷贝课前资料中的jdk8.tar.gz文件到docker-demo这个目录
步骤四:拷贝课前资料提供的Dockerfile到docker-demo这个目录
dockerfile文件内容:
# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local
# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar
# 安装JDK
RUN cd $JAVA_DIR \
&& tar -xf ./jdk8.tar.gz \
&& mv ./jdk1.8.0_144 ./java8
# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
步骤五:进入docker-demo
步骤六:运行命令
docker build -t javaweb:1.0v .
启动镜像:
docker run --name javaweb -p 8090:8090 -d javaweb:1.0v
案例2:基于Java:8-alpine镜像,将一个Java项目构建为镜像
实现思路如下:
① 新建一个空的目录,然后在,目录中新建一个文件,命名为Dockerfile
还是使用原来的文件目录
②拷贝课前资料提供的docker-demo.jar到这个目录中
还是使用原来的文件目录
③编写Dockerfile文件
# 指定基础镜像
FROM java:8-alpine
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local
# 拷贝java项目的包
COPY ./docker-demo.jar /tmp/app.jar
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
④使用docker build命令构建镜像
docker build -t javaweb:2.0v .
docker run --name web -p 8090:8090 -d javaweb:2.0v
Docker Compose是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Compose 是 Docker
公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML
格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器
注:引用CSDN博主「山河亦问安」,原文链接点击查看原文,这也是一篇关于DockerCompose不错的文章,值得推荐!
Compose文件是一个文本文件,在文件中通过定义集群中的每个容器如何运行
version: "3.8" //compose版本
service:
mysql: //容器名称
images: mysql:5.7.25 //镜像名称
environment: //环境名称
MYSQL_ROOT_PASSWORD: 654321
volumes: //数据卷
- /tmp/mysql/data:/var/lib/mysql
- /tpm/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cof
web:
build: . //从当前目录构建镜像
ports: //暴露端口
- 8090: 8090
CentOS7安装DockerCompose:
Linux下需要通过命令下载:
# 安装
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
修改文件权限
# 修改权限
chmod +x /usr/local/bin/docker-compose
查看docker-compose版本
docker-compose --version