Docker学习
-
Docker 其中包括,镜像、容器、仓库,很简单,目的就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的产品(可以是 web 应用或者数据库应用)及其环境能够做到“一次封装,到处运行”。再通俗点说,我们使用Docker,只需要配置一次Docker容器上面的应用,就可以跨平台,跨服务器,实现应用程序跨平台间的无缝衔接。Docker实际上就相当于一个封闭的沙盒或者是集装箱,它可以把不同的应用全都放在它的集装箱里面,并且以后有需要的时候,可以直接把集装箱搬到其他平台或者服务器上,实现容器虚拟化技术,随用随搬
-
镜像和容器
-
镜像(image):Docker 将应用程序机器所需依赖、函数库、环境、配置等文件打包在一起,就是硬盘中的文件
-
容器:镜像中的应用程序运行后形成的进程就是容器,只是docker会给容器做隔离,外部不可见,容器运行需要写数据,把镜像中的文件复制到自己的容器中再写,就可以实现隔离
-
DockerHub
-
是Docker的镜像托管平台,称为 Docker Registry
-
可以利用公开的DockerHub(网易镜像服务、阿里镜像)创建自己的容器,在不同的系统上运行项目
-
docker架构
-
docker是CS架构,由服务端和用户端组成
-
服务端docker的守护进程,负责处理docker的指令,管理镜像和容器等
-
客户端,通过命令(本地)或者RestAPI想docker服务端发送指令,可以在本地或远程向服务端发送指令
-
安装docker(CentOS)
-
Docker分为CE和EE版本,CE为免费,EE为收费
-
# 1、卸载旧的版本
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、设置镜像的仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
\\\# 更新yum软件包索引
yum makecache fast
\\\# 4、安装docker相关的源 docker-ce 社区 ee 企业版
yum install -y docker-ce
\\\# 5、启动docker
systemctl start docker
\\\# 6、使用docker version 查看是否安装成功
docker version
```
-
配置防火墙端口
-
配置国内docker镜像地址,获取地址https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
-
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": \\\\\\["https://em2j5stq.mirror.aliyuncs.com"\\\\\\]
}
EOF
systemctl daemon-reload
systemctl restart docker
```
-
基本操作
-
镜像名称由两部分组成\[repository\]:\[tag\] 比如 mysql:5.7 不加版本号 默认latest
-
docker build 获取镜像(本地) docker pull (远程拉取)
-
docker images 查看当前的镜像
-
docker rmi 删除镜像
-
docker push 吧镜像推送到dockerHub
-
docker save 把镜像保存成一个压缩包
-
docker load 吧压缩包加载成镜像
-
docker --help ~ docker images --help
-
hub.docker.com 查看dockerhub官网镜像可以查看版本 按需
-
下载镜像 执行docker pull nginx
-
docker images查看镜像
-
保存镜像 docker save -o nginx.tar nginx:latest
-
删除镜像 docker rmi nginx:latest
-
导入镜像 docker load -i nginx.tar
-
容器相关命令
-
docker run 容器启动
-
docker pause 暂停 进程挂起
-
docker unpause 进程恢复
-
docker stop 进程杀死
-
docker start 进程启动
-
docker ps 查看所有容器及其状态
-
docker logs 查看容器运行日志
-
docker exec 进入容器执行命令
-
docker rm 删除指定容器
-
基本操作-容器
-
去docker hub 查看nginx的相关命令
-
端口映射 80:80 左边为宿主机的端口,右边为容器端口。访问宿主机80相当于访问容器的80端口,此时容器相当于一个服务器
-
进入容器修改文件
-
进入容器之后相当于进入另一个阉割版linux系统,里面有nginx的文件系统,里面基本没有封装的liunx命令
-
使用 exit 退出容器
-
不建议在容器内部修改文件
-
执行redis容器命令。docker exec -it mr redis-cli
-
数据卷
-
在容器内不便于修改,数据不可复用,操作没有日志,升级维护困难
-
数据卷volumes是一个虚拟目录,指向宿主机文件系统中的某个目录
-
数据卷操作语法 docker volume \[command\]
-
创建数据卷 docker volume create name
-
查看 docker volume ls
-
查看存在硬盘中位置 docker volume inspect name
-
删除未使用的数据卷 docker volume prune
-
删除指定数据 docker volume rm name
-
挂在数据卷
-
创建一个nginx容器,吧容器文件木目录挂载到volume目录上
-
docker run – name nginx -p 80:80 -v html:/usr/share/nginx/html -d nginx
-
-v html:/usr/share/nginx/html 把容器中的/usr/share/nginx/html 挂载到volume的html目录
-
在volume的html文件夹下有_data文件夹,对应/usr/share/nginx/html
-
操作volume文件相当于操作容器内的文件
-
启动容器的时候挂载volume数据卷不存在时会自动创建
-
启动mysql 配置密码端口,配置文件映射,数据文件映射
-
Dockerfile自定义镜像
-
镜像结构
-
镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成
-
镜像分层
-
构建DockerFile文件运行命令
-
#指定基础镜像
FROM ubuntu: 16.04
#配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local
#拷贝jdk和ljava项目的包
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
```
-
在Linux中构建,新建文件夹,进入到文件夹,把jdk和程序包放到文件夹中
-
执行构建命令 docker build -t javaweb:1.0 . -t是镜像的tag 最后有个. 千万不能忘记这是dockerfile所在的目录,,表示当前文件夹
-
构建后就加入到了docker的镜像中了
-
然后就可以根据这个镜像运行容器了
-
基于java:8-alpine镜像,配置文件就很简单
-
```bash
指定基础镜像
FROM java:8-alpine COPY ./docker-demo.jar /tmp/app.jar暴露端口
EXPOSE 8090入口. java项目的启动命令Ⅰ
ENTRYPOINT java -jar /tmp/app.jar ```
-
构建镜像,运行
-
DockerCompose
-
可以基于Compose文件帮我们快速部署分布式应用,无需手动一个个创建和运行容器
-
Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行
-
compose文件内容就是build run命令
-
可参考官网Compose
-
centos7安装dockerCompose
-
下载
-
#安装cur1 -L
wget https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64 -O /usr/bin/docker-compose
chmod +x /usr/bin/docker-compose
```
-
修改权限 chmod -x docker-compose
-
安装compose的补全命令
-
curl -L https://raw.githubusercontent.com/docker/compose/2.5.0/contrib/completion/bash/docker-compose -o docker-compose
-
docker-compose执行文件可以分级,每个微服务一个文件夹,每个文件夹下有一个Dockerfile
-
文件夹中的DockerFile,为构建镜像命令
-
docker-componse.yaml (结尾一定要yaml)
-
执行命令 docker-compose up 启动
-
若是要后台运行: docker-compose up -d 若不使用默认的docker-compose.yml 文件名执行: docker-compose -f server.yml up -d
-
docker-compose集群打包之后,每个容器可以通过容器服务名称访问到指定容器
-
原来是localhost:8080,访问容器为noacos:8080
-
微服务项目打包之前,注意修改application中相关服务的访问地址
-
docker-compose --help查看相关命令