Docker镜像命令
从DockerHub中拉取镜像
2.拉取一个nginx镜像
$ docker pull nginx
- 通过docker images查看拉取到的镜像
$ docker images
利用Docker save将nginx镜像导出磁盘,然后通过load加载回来
- 导出
$ docker save -o nginx.tar nginx:latest
- 导入
$ 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项目
- 新建一个空文件夹docker-demo
- 把打包好的.jar文件到docker-demo这个目录
- 创建一个Dockerfile文件到docker-demo这个目录
# 指定基础镜像
FROM java:8-alpine
# 拷贝java项目的包
COPY ./docker-demo.jar /tmp/app.jar
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
- 进入docker-demo,运行命令:
$ docker build -t javaweb:1.0 .
- 启动刚刚创建好的镜像
$ docker run --name web -p 8090:8090 -d javaweb:1.0
DockerCompose
Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器!
Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。
实现思路如下:
新建一个文件夹,文件结构如下
image.png
每个微服务里面
image.png
- 编写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"
- 修改自己的cloud-demo项目,将数据库、nacos地址都命名为docker-compose中的服务名
- 使用maven打包工具,将项目中的每个微服务都打包为app.jar
- 将打包好的app.jar拷贝到cloud-demo中的每一个对应的子目录中
- 将cloud-demo上传至虚拟机,利用 docker-compose up -d 来部署
dock
网友评论