美文网首页
8.Docker使用

8.Docker使用

作者: 星野君 | 来源:发表于2022-05-20 16:07 被阅读0次

Docker镜像命令

从DockerHub中拉取镜像

  1. 去镜像仓库搜索要下载的镜像
    Docker Hub Container Image Library | App Containerization

2.拉取一个nginx镜像

$ docker pull nginx
  1. 通过docker images查看拉取到的镜像
$ docker images

利用Docker save将nginx镜像导出磁盘,然后通过load加载回来

  1. 导出
$ docker save -o nginx.tar nginx:latest  
  1. 导入
$ docker load -i nginx.tar

Docker容器命令

  • 创建运行一个nginx容器
$ docker run --name some-nginx -d -p 8080:80 nginx

docker run:创建并运行一个容器
--name:给容器起一个名字
-p: 将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
-d:后台运行容器

  • 查看所有运行中的容器状态
$ docker ps
$ docker ps -a   #所有容器
  • 查看容器日志
$ docker logs -f some-nginx
  • 进入容器内部
$ docker exec -it some-nginx bash
  • 停止容器
$ docker stop some-nginx
  • 启动容器
$ docker start some-nginx
  • 删除容器
$ docker rm some-nginx

数据卷

  • 数据卷的作用
    将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全
  • 数据集操作
$ docker volume create    # 创建一个volume
$ docker volume inspect   # 显示一个或者多个volume的信息
$ docker volume ls        # 列出所有volume
$ docker volume prune     # 删除未使用的volume
$ docker volume rm        # 删除一个或者多个指定的volume
  • 挂载数据卷
    创建容器时可以通过-v参数来挂载一个数据卷到某个容器目录
$ docker run --name mn -v html:root/html -p 80:80 nginx

挂载之后就可以通过inspect 查看挂载的目录,然后直接在容器外部直接修改容器里的内容

  • 创建并运行一个MySQL容器,将宿主机目录直接挂载到容器
$ docker pull mysql:5.7.25
$ mkdir -p /tmp/mysql/data
$ mkdir -p /tmp/mysql/conf

在/tmp/mysql/conf创建一个.cnf文件

[mysqld]
skip-name-resolve
character_set_server=utf8
datadir=/var/lib/mysql

启动mysql

$ docker run \
 --name mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-p 3306:3306 \
-v /tmp/mysql/data:/var/lib/mysql \
-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
-d \
mysql:5.7.25

自定义镜像

  • Dockerfile基础命令


    image.png
  • 基于java:8-alpine镜像构建一个新镜像,运行一个java项目

  1. 新建一个空文件夹docker-demo
  2. 把打包好的.jar文件到docker-demo这个目录
  3. 创建一个Dockerfile文件到docker-demo这个目录
# 指定基础镜像
FROM java:8-alpine

# 拷贝java项目的包
COPY ./docker-demo.jar /tmp/app.jar

# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
  1. 进入docker-demo,运行命令:
$ docker build -t javaweb:1.0 .
  1. 启动刚刚创建好的镜像
$ docker run --name web -p 8090:8090 -d javaweb:1.0

DockerCompose

Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器!
Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。

实现思路如下:
新建一个文件夹,文件结构如下


image.png

每个微服务里面


image.png
  1. 编写docker-compose文件
version: "3.2"

services:
  nacos:
    image: nacos/nacos-server
    environment:
      MODE: standalone
    ports:
      - "8848:8848"
  mysql:
    image: mysql:5.7.25
    environment:
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "$PWD/mysql/data:/var/lib/mysql"
      - "$PWD/mysql/conf:/etc/mysql/conf.d/"
  userservice:
    build: ./user-service
  orderservice:
    build: ./order-service
  gateway:
    build: ./gateway
    ports:
      - "10010:10010"

  1. 修改自己的cloud-demo项目,将数据库、nacos地址都命名为docker-compose中的服务名
  2. 使用maven打包工具,将项目中的每个微服务都打包为app.jar
  3. 将打包好的app.jar拷贝到cloud-demo中的每一个对应的子目录中
  4. 将cloud-demo上传至虚拟机,利用 docker-compose up -d 来部署
    dock

相关文章

网友评论

      本文标题:8.Docker使用

      本文链接:https://www.haomeiwen.com/subject/ecytprtx.html