Docker使用详解 2021-12-30 17:00:00 编程 Linux, Java, Docker 暂无评论 527 次阅读 4112字 修改时间:2021-12-31 10:20:36 ##安装Docker,并设置Docker仓库为阿里云 ```bash yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install -y docker-ce docker-ce-cli containerd.io ``` ## 简单了解下Docker的常用配置和使用命令 ***设置Docker日志文件大小,例如设置一个日志文件最多10m,最多产生10个,也就是100m*** `vim /etc/docker/daemon.json` ```json { "log-driver":"json-file", "log-opts": {"max-size":"10m", "max-file":"10"} } ``` ***启动、重新加载、重启命令*** ```bash systemctl start docker systemctl daemon-reload systemctl restart docker ``` ## 名词解释 - 容器:可以理解为进程或者服务 - 镜像:镜像可以理解为一个个安装包,安装包安装后就变成了容器 ## 常用命令 查看运行中的容器,-a 是查看全部容器 ```bash docker ps docker ps -a ``` **启动、重启、停止、删除**容器, 使用容器id或者容器名称 ```bash docker start {ContainerId or name} docker restart {ContainerId or name} docker stop {ContainerId or name} docker rm {ContainerId or name} ``` **查看docker日志** ```bash docker logs {ContainerId or name} ``` **查看、删除**镜像(镜像ID或名称) ```bash docker images docker rmi {ImageId or name} ``` **将容器保存为镜像** ```bash docker commit -m '提交信息' -a '作者' {容器ID或者名称} {镜像名称} ``` **将镜像保存成 tar 归档文件** ```bash docker save -o test.tar {镜像ID或者名称} ``` **加载镜像文件** ```bash docker load < test.tar ``` **启动镜像** 镜像相当于一个安装包,怎么把镜像安装到容器呢,用run启动它,这样不然可以直接运行镜像,还会他把安装到容器中,下次就可以直接使用`start`命令启动了,docker run相当于执行了两步操作:1.将镜像放入容器中,2.将容器启动,这里的启动参数有很多,具体的参数可以参考[这篇博客 ](https://blog.csdn.net/zhong_jay/article/details/108668246 "这篇博客 ") ```bash docker run [OPTIONS] IMAGE [COMMAND] [ARG...] ``` **进入到docker容器中** 为什么需要进入到容器?docker 类似于一个轻量级虚拟机,甚至可以将一个centos安装到docker中吧,一些需要命令交互的容器,我们可以进入到他的内部中 ```bash #进入容器 docker exec -it 镜像名 /bin/bash #退出容器 exit ``` **制作镜像的方式** 如何把应用放到docker容器中呢,一般有两种方式 - 第一:直接去[DockerHub](https://hub.docker.com/ "DockerHub")下载别人已经制作好的镜像,,使用命令去中央仓库拉取镜像 ```bash docker pull {image} ``` - 第二:使用Dockerfile文件制作镜像 ------------ ##示例 结合以上,我们开始实操一个使用Docker部署Spring boot应用,并且让Docker加载外部的`yaml`文件的案例 首先,先准备一个可以执行的SpringBoot应用jar包和一个`application.yaml`文件,其中test.jar包中的`port`为8081,application.yaml中的`port`为8080  ####安装jdk 然后呢,再为docker准备一个jdk1.8的容器 ```bash docker pull openjdk:8 ```  运行jdk1.8镜像 ```bash docker run -d -it --name jdk8 openjdk:8 ```  ------------ ####创建Dockerfile文件 OK,现在环境都准备好了,我们再创建一个Dockerfile文件,内容如下: ```go FROM openjdk:8 VOLUME /tmp COPY test.jar ./test.jar WORKDIR / ENTRYPOINT ["java","-jar","-Dspring.config.location=/conf/application.yml","test.jar"] ``` 参数说明: - FROM openjdk:8,代表依赖jdk8这个容器环境 - VOLUME /tmp ,是把/tmp 挂在到容器中,因为Springboot 中的tomcat会把这个作为工作目录 - COPY 是把本地jar包拷贝到容器中 - WORKDIR /,容器工作目录,执行命令的目录 - ENTRYPOINT 是最终执行的启动命令,注意`/conf`是容器中的目录  ####制作镜像 test是镜像名称,后面的【.】代表Dockerfile文件在当前目录下 ```bash docker build -t test . ```  ####运行镜像 ```bash docker run --name=test -d -p 8080:8080 -v /app/test:/conf test ```  参数说明: - --name=test,表示设置容器名称为test - -d 表示后台运行 - -p 表示将容器端口映射到宿主机 - -v 表示把把目录`/app/test`挂载到容器的`/conf`目录上  访问8080端口已经能看看到页面了,说明容器已经启动成功,并且已经挂载到外部的yml配置文件了 ####查看日志 我们可以查看test容器的日志 ```bash docker logs test ```  ####深度剖析 我们还可以进入到容器中,查看挂载后的效果 ```bash docker exec -it test /bin/bash ```  如图所示,Dockerfile中的命令`COPY test.jar ./test.jar`,将jar包拷贝到了容器根目录下 运行镜像的命令 `-v /app/test:/conf`,则是把 /app/test目录整体挂载到了容器中/conf目录了 现在回头看看Dockerfile中的 `ENTRYPOINT ["java","-jar","-Dspring.config.location=/conf/application.yml","test.jar"]` 是不是已经明白是什么意思了呢,其实就是在容器的根目录下执行了 `java -jar -Dspring.config.location=/conf/application.yml test.jar`这条命令而已 标签: Linux, Java, Docker
评论已关闭