文章目录
docker入门到部署
镜像相关命令
1.注意 docker run
和docker start
的区别
一个是重新创建一个容器,一个是在原有的基础上重新运行该容器。
2.docker exec
用途
进入容器内部,更改操作。
docker pull nignix
docker pull
数据卷
数据卷(volume)
:虚拟目录,是容器内部与宿主机目录之间映射桥梁。
通过数据卷,就可以通过宿主机中的高级操作如vi
编辑文件来代替容器内的编辑文件操作(容器只提供运行的基本环境,一般没有vi等应用。
命令操作都是在docker volume
首部下进行
- 必须在docker run -v数据卷:容器内目录,实现挂载。
root@stwu-virtual-machine:~# docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx
-
查看数据卷目录
使用docker volume ls
root@stwu-virtual-machine:~# docker volume ls DRIVER VOLUME NAME local 73c66b3305b3bd8b127f7ad724387130050084383df24892b868bcbdc8adc6df local 226f93a5b32c9c0f3aad9c6c5410df963d43720b072fac81cabdd6c027b2e2bf local ed266f68b5485071eded83a734a06e3bc2180294a5d5da75333625205509e4f4 local html
-
详细查看挂载的数据卷信息
docker inspect /html
,可以看到在宿主机上存储位置。就可以通过cd来进入文件,即容器内部的文件中。
我们使用MobaXtern
来添加文件信息,可以看到添加到宿主机的文件,可以访问到容器内部的文件,实现挂载。(ps:我这里是除了小问题,所以创建了一个新的nginx2,端口映射是81,正常来说是没问题的)
本地目录挂载
1.查看容器是否有挂载
使用docker inspect name
其中name为容器的名字,如你的mynginx
等。
这里查看一下自己的mysql容器是否有挂载。
右边是自己的,可能是因为mysql版本号的问题,我用的5.7版本。
上面是匿名挂载目录。
2.直接本地目录挂载
我们以-mysql的从重新配置为例子
本地目录必须以"I"或"./"开头,如果直接以名称开头,会被识别为数据卷而非本地目录
-V mysql : /var/ib/mysql会被识别为-个数据卷叫mysq|
-V ./mysq|: /var/lib/mysql会被识别为当前目录下的mysq|目录
我这里是想挂载到电脑的 dockerData
中,所以更改了一下挂载目录,确保已经有这些目录哈
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v /dockerData/mysql/data:/var/lib/mysql \
-v /dockerData/mysql/init:/docker-entrypoint-initdb.d \
-v /dockerData/mysql/conf:/etc/mysql/conf.d \
mysql
镜像文件dockerfile
自定义镜像上传,帮助构建分层的镜像层级
docker build -t name:tag .
后面的.
是指同一目录下的dockerfile
容器之间的互连
docker network ~
用docker network connect ~可以看到新添加的类型为bridge的网络
-
容器添加到新建的网络
例如这里的docker network connect wst mysql,再次查询mysql内部信息可以看到新添wst的网关。
-
如果在创建容器时就使用自定义网关
docker run -d --network ~ …
使用
--network
直接加入网络
实地部署应用
可以看项目部署_哔哩哔哩_bilibili,这个老师讲的真的好,大家可以
1.先部署后端项目
先打包成可运行的jar包,跟随dockerfile文件,复制到虚拟机文件中,进行上传成镜像。注意网络的配置,保证后面的容器处于同一个网路。
2.部署前端项目
创建一个nginx容器,键nginx.conf和html进行挂载。主要是conf的文件编写啊~ 网络的配置。
提升:DockerCompose
-
手动部署的缺点:容器太多,麻烦;没有整体思想
-
使用DockerCompose:直接部署,整体性
单独的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 compose~信息
这样直接删除其他的容器甚至镜像,直接创建。删除也没有残留。。