docker

一.概念

Docker 是一个开源的应用容器引擎,可以帮助我们减轻服务部署的压力,他有三个概念:镜像、仓库、容器实例,好处是我们可以将我们的 Java 程序放到一个 Tomcat 实例中,再把该镜像放到远程仓库,任何环境想部署该 Java 应用,只需要从远程仓库下载该镜像并运行成为一个容器实例,而实例中运行着我们的 Java 程序,相当于我们构建一次镜像之后,随处运行;

容器内的应用进程直接运行于宿主的内核;

每个容器之间互相隔离,且有自己的文件系统 ,容器之间进程不会相互影响;

镜像是包含某个或多个运行服务的独立 Linux 运行环境;

镜像由一层一层的文件系统组成,这种层级的文件系统称为UnionFS;

分层的好处是可以共享资源,方便复用;

Docker镜像层都是只读的,容器层是可写的。当容器启动时,一个新的可写层被加载到镜像的顶部;

二.命令

帮助启动类

sh 复制代码
# 启动docker
systemctl start docker
# 停止docker
systemctl stop docker
# 重启docker
systemctl restart docker
# 查看docker状态
systemctl status docker
# 开机自启动
systemctl enable docker
# 查看docker概要信息
docker info
# 查看镜像/容器/数据卷所占的空间
docker system df
# 查看docker总体帮助文档
docker --help
# 查看docker命令帮助文档
docker 具体命令 --help

镜像类

sh 复制代码
# 列出本地主机上的镜像
docker images
# 从仓库中搜索镜像(https://hub.docker.com)
docker search 镜像名
# 下载镜像到本地
docker pull 镜像名:版本号
# 删除镜像(删除全部镜像: docker rmi -f $(docker images -qa))
docker rmi  -f 镜像ID

容器类

sh 复制代码
# 创建容器实例
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run -it --name zs --privileged=true -v 本机路径:容器内路径 -p 6379:6379 redis /bin/bash
--name="容器新名字"     为容器指定一个名称;
-d:                    启动后台守护式容器(后台运行,必须有一个前台进程,否则会自动退出,解决:-it , Ctrl p q)
-it:                  启动前台交互式容器
-p: 指定端口映射,小写p 
-P: 随机端口映射,大写P 
-v:挂载数据卷(保证容器内数据的持久化,容器删除时,数据仍在)
# 退出容器终端并停止容器
exit
# 退出容器终端但不停止容器
Ctrl p q
# 列出当前正在运行的容器实例(所有: -a)
docker ps
# 启动已停止运行的容器
docker start 容器ID
# 重启容器
docker restart 容器ID
# 停止容器
docker stop 容器ID
# 强制停止容器
docker kill 容器ID
# 删除容器
docker rm -f 容器ID
# 查看容器日志
docker logs 容器ID
# 查看容器内运行的进程
docker top 容器ID
# 查看容器内部细节
docker inspect 容器ID
# 进入正在运行的容器并以命令行交互(退出: exit)
docker exec -it 容器ID /bin/bash
# 从容器内拷贝文件到主机上
docker cp 容器ID:容器内路径 目的主机路径
# 导出容器为tar文件
docker export 容器ID > 文件名.tar
# 根据tar文件导入为镜像
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
# 提交容器为一个新的镜像
docker commit -m="提交的描述信息" -a="作者" 容器ID 目标镜像名:[标签名]

三.Dockerfile

用来构建Docker镜像的文本文件,由一条条构建镜像所需的指令和参数构成的脚本;

每条指令都会创建一个新的镜像层并对镜像进行提交;

Docker执行Dockerfile的大致流程:

(1)docker从基础镜像运行一个容器

(2)执行一条指令并对容器作出修改

(3)执行类似docker commit的操作提交一个新的镜像层

(4)docker再基于刚提交的镜像运行一个新容器

(5)执行dockerfile中的下一条指令直到所有指令都执行完成

编写 Dockerfile 文件 ===> docker build 命令构建镜像 ===> docker run 依镜像运行容器实例;

Dockerfile文件内容:

shell 复制代码
# 基础镜像
FROM centos
# 镜像作者信息
MAINTAINER bao<zzyybs@126.com>
# 设置环境变量
ENV MYPATH /usr/local
# 创建容器后,终端默认登陆的进来工作目录
WORKDIR $MYPATH
# 容器构建时需要运行的命令(RUN是在 docker build时运行)
# 安装java8及lib库: RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
# 将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
ADD jdk-8u361-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_361
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
# 当前容器对外暴露出的端口
EXPOSE 22122
# 指定容器启动后的要干的事情(Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换)
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

构建命令:docker build -t 新镜像名字:TAG .

docker build -t centosjava8:1.5 .

通过Dockerfile启动 Java 服务

Dockerfile文件:

shell 复制代码
FROM java:8
MAINTAINER bao
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为zzyy_docker.jar
ADD demo-0.0.1-SNAPSHOT.jar /usr/local
ENTRYPOINT ["java","-jar","/usr/local/demo-0.0.1-SNAPSHOT.jar"]
#暴露9876端口作为微服务
EXPOSE 9876

构建镜像:docker build -t demo .

运行镜像:docker run -d -p:9999:9876 demo

访问微服务:124.70.13.135:9999

相关推荐
杨浦老苏20 小时前
Docker方式安装你的私人AI电脑助手Moltbot
人工智能·docker·ai·群晖
x70x8020 小时前
# Docker 搭建 MySQL 8 主从复制(踩坑实录 + 完整验证)
mysql·docker·容器
qq_3168377520 小时前
docker 运行 cn_clip
运维·docker·容器
木卫二号Coding1 天前
Docker-构建自己的Web-Linux系统-Ubuntu:22.04
linux·前端·docker
春日见1 天前
win11 分屏设置
java·开发语言·驱动开发·docker·单例模式·计算机外设
岳来1 天前
网络小白理解容器网络endpointid
网络·docker·endpoint
江湖有缘1 天前
轻量级知识协作平台搭建:Docker + MediaWiki入门教程
docker·容器·eureka
Genie cloud1 天前
在 Mac 上使用 Docker 安装宝塔并部署 LNMP 环境
macos·docker·容器·云计算
Suchadar1 天前
Docker常用命令
运维·docker·容器
你才是臭弟弟1 天前
MinIo开发环境配置方案(Docker版本)
运维·docker·容器