Java_Docker

镜像和容器:

镜像仓库:

        存储和管理镜像的平台,镜像仓库中有非常多常用软件的镜像,Docker官方维护了一个公共仓库​​​​​​:​Docker Hub

部署MySQL:

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  mysql

        端口映射即将服务器端口映射到容器端口,例如访问服务器的3306端口,则服务器会调用MySQL容器。

        镜像名称一般分两部分:镜像名:版本,没有指定版本时默认为最新版本。

常用命令:

命令别名:

①进入root下的.bashrc文件:

vi ~/.bashrc

如下:

②添加命令别名:

我已经在其中添加了一行内容

alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'

即代表dps命令可以代表后面单引号内的命令,具有同样功能,即更加简洁的展示容器状态信息。

③使文件生效:

source ~/.bashrc

接下来就可以直接使用dps命令了

数据卷挂载:

        完成绑定映射的文件,修改其中一个另一个也会自行修改。这样可以更好的利用宿主机的更高级的编辑器,方便我们操作容器内文件,或者方便迁移容器产生的数据。

常用命令:

映射nginx的静态文件html:

docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx

        这里需要先删除原有的nginx容器,重新run一个nginx容器。

本地目录挂载:

练习:

代码:

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  -v /root/mysql/data:/var/lib/mysql \
  -v /root/mysql/init:/docker-entrypoint-initdb.d \
  -v /root/mysql/conf:/etc/mysql/conf.d \
  mysql

        注意需要先删除原MySQL容器

自定义镜像:

镜像结构:

DockerFile:

构建Java镜像:

Dockerfile:
# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

网络:

自定义网络:

        假如自定义网络的容器才可以通过容器名互相访问。

常用命令:

也可以在容器创建时将它放入某个网络:

docker run -d --name your-images-name -p 80:80 --network your-net-name images-name

DockerCompose:

MySQL的两种部署方法:

使用DockerCompose部署:

        一次性部署MySQL、前端和后端

docker-compose.yml:

version: "3.8"

services:
  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"
      - "./mysql/data:/var/lib/mysql"
      - "./mysql/init:/docker-entrypoint-initdb.d"
    networks:
      - hm-net
  hmall:
    build: 
      context: .
      dockerfile: Dockerfile
    container_name: hmall
    ports:
      - "8080:8080"
    networks:
      - hm-net
    depends_on:
      - mysql
  nginx:
    image: nginx
    container_name: nginx
    ports:
      - "18080:18080"
      - "18081:18081"
    volumes:
      - "./nginx/nginx.conf:/etc/nginx/nginx.conf"
      - "./nginx/html:/usr/share/nginx/html"
    depends_on:
      - hmall
    networks:
      - hm-net
networks:
  hm-net:
    name: hmall

(参考docker run写)

将上述文件与mysql、nginx、后端dockerfile与jar包放到同一目录下

再执行下面的语句:

docker compose up -d

即可成功部署。

### 命令解析 `docker run -d --name user -p 8001:8001 -v /opt/java_app_docker/app:/app user` 是一条用于创建并启动 Docker 容器的命令,各部分参数含义如下: - `docker run`:用于创建并启动一个新的 Docker 容器。 - `-d`:表示以守护进程(后台)模式运行容器。 - `--name user`:为新创建的容器指定名称为 `user`。 - `-p 8001:8001`:将宿主机的 8001 端口映射到容器的 8001 端口,这样可以通过宿主机的 8001 端口访问容器内监听 8001 端口的服务。 - `-v /opt/java_app_docker/app:/app`:将宿主机的 `/opt/java_app_docker/app` 目录挂载到容器内的 `/app` 目录,实现宿主机和容器之间的文件共享。 - `user`:指定要使用的 Docker 镜像名称。 ### 优化建议 #### 1. 检查镜像是否存在 在运行 `docker run` 命令之前,最好先检查所需的镜像是否已经存在于本地。可以使用 `docker images` 命令查看本地镜像列表,如果镜像不存在,可以使用 `docker pull user` 来拉取镜像。 #### 2. 增加资源限制 为了避免容器占用过多的系统资源,可以为容器设置资源限制,例如 CPU 和内存限制。可以使用 `--cpus` 和 `--memory` 参数来设置: ```bash docker run -d --name user -p 8001:8001 -v /opt/java_app_docker/app:/app --cpus=0.5 --memory=512m user ``` 上述命令将容器的 CPU 使用限制为 0.5 个核心,内存使用限制为 512MB。 #### 3. 启用日志驱动 默认情况下,Docker 使用 JSON 文件驱动来记录容器的日志。为了更好地管理和查看日志,可以考虑使用其他日志驱动,例如 `syslog` 或 `fluentd`。可以使用 `--log-driver` 参数来指定日志驱动: ```bash docker run -d --name user -p 8001:8001 -v /opt/java_app_docker/app:/app --log-driver=syslog user ``` #### 4. 健康检查 可以为容器添加健康检查,以便 Docker 能够定期检查容器的健康状态。可以使用 `--health-cmd` 参数来指定健康检查命令: ```bash docker run -d --name user -p 8001:8001 -v /opt/java_app_docker/app:/app --health-cmd="curl -f http://localhost:8001/health || exit 1" user ``` 上述命令将定期执行 `curl -f http://localhost:8001/health` 命令来检查容器的健康状态,如果命令执行失败,则认为容器不健康。 #### 优化后的命令示例 ```bash docker run -d --name user -p 8001:8001 -v /opt/java_app_docker/app:/app --cpus=0.5 --memory=512m --log-driver=syslog --health-cmd="curl -f http://localhost:8001/health || exit 1" user ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值