docker images
docker pull 镜像名 #若不加tag,则是下最新的,若想下指定版本,就要加上tag(版本号)
docker pull redis #下载redis的latest版
docker pull redis:7.0 #下载redis的7.0版本
docker ps
docker run [OPTIONS] 镜像名 # 若镜像不存在,则会自动下载对应版本并创建
OPTIONS说明:
-d: 后台运行容器,并返回容器ID
-e RABBITMQ_DEFAULT_USER=admin: 设置环境变量。镜像的环境变量可在docker hub中查找
--hostname my-rabbit:设置容器的hostname(类似linux的hostname)
--name some-rabbit: 为容器指定一个名称
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-v: 绑定一个数据卷,即文件的映射,格式为:主机(宿主)文件绝对路径:容器文件绝对路径。可双向映射.
一般容器的数据都是放在/var/lib/XXX下,更详细的信息还是去docker hub中查找
-----------------------------------------------------------------------------------------------
例子:创建rabbitmq容器
docker run -d \
-v /root/docker/rabbitmq-cluster/mq1/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
-v /root/docker/rabbitmq-cluster/mq1/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin \
--name mq1 \
--hostname mq1 \
-p 8071:5672 \
-p 8081:15672 \
rabbitmq:3.8.27-management
更详细的命令说明看这里:https://www.runoob.com/docker/docker-run-command.html
docker start 容器id #启动容器
docker stop 容器id #停止容器
docker restart 容器id #重启容器
docker kill 容器id #强制停止容器
docker exec -it 容器id /bin/bash
docker log 容器id
docker build -t 镜像名:tag dir #镜像名只能全小写。dir指jar包与Dockerfile所在的文件夹路径
docker inspect 容器id
docker network ls
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mei_net
docker network inspect mei_net
docker network connect mei_net tomcat-01
详细信息看这篇博文:https://blog.csdn.net/huangjhai/article/details/120425457
命令介绍:
指令 | 说明 |
---|---|
FROM | 指定基础镜像 |
MAINTAINER | 镜像作者,姓名或邮箱 |
RUN | 镜像构建的时候需要运行的命令 |
ADD | 将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget |
WORKDIR | 镜像的工作目录 |
VOLUME | 挂载的目录 |
EXPOSE | 端口配置 |
CMD | 指定这个容器启动的时候要运行的命令(只有最后一个会生效) |
ENTRYPOINT | 指定这个容器启动的时候要运行的命令,可以追加命令 |
ONBUILD | 当构建一个被继承DockerFile,这个时候就会运行ONBUILD的指令,触发指令 |
COPY | 功能类似ADD,但是是不会自动解压文件,也不能访问网络资源 |
ENV | 构建的时候设置环境变量 |
案例:SpringBoot项目打包成docker镜像
1.application.yaml:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://123.456.789.0:3306/transaction_test?characterEncoding=utf8&useUnicode=false
username: root
password: 123456
mybatis:
mapper-locations: classpath:mapper/*.xml
configuration:
map-underscore-to-camel-case: true
server:
port: 8085
3.Dockerfile:
FROM java:8
MAINTAINER meizhaowei
ADD TransactionTest-0.0.1-SNAPSHOT.jar TransactionTest.jar
EXPOSE 8085
ENTRYPOINT ["java","-jar","TransactionTest.jar"]
4.Dockerfile和TransactionTest-0.0.1-SNAPSHOT.jar放到同一文件夹下
5.构建命令:
docker build -t transactiontest:1.0 /mnt/tempBuild
这样就可以将java项目打包成镜像了:
创建容器时,最好进入自定义的网络模式,然后数据库也进入这个网络模式,这样就能访问到数据库了
使用docker compose编排容器,容器编排的意思是,按照容器之间的依赖关系,能一键重启docker服务,无需我们考虑容器的启动先后顺序
1.docker-compose.yml:
version: "3"
services:
app:
image: transactiontest:1.0
container_name: transactiontest
ports:
- "8085:8085"
volumes:
- /app/app:/data
networks:
- mei_net
depends_on:
- mysql
mysql:
image: mysql:8.0.31
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: transaction_test
ports:
- "3306:3306"
volumes:
- /mnt/docker/mysql:/var/lib/mysql
networks:
- mei_net
networks:
mei_net:
2.开始构建
docker compose up -d #-d是后台运行
harbor与docker hub的关系,其实有点类似于GitLab和GitHub的关系。我们自己打好的镜像,可以上传到harbor/docker hub中进行管理。
下面以docker hub为例,实现实现镜像推送到docker hub
docker login -u 1904006196
docker tag transactiontest:1.0 1904006196/transactiontest:1.0
docker push 1904006196/transactiontest:1.0