docker是什么,docker翻译过来的意思就是码头工人,顾名思义,docker本质上就是一个搬运工,只不过从搬运货物改成了搬运程序,使搬运的不同的程序能够独立的运行在码头上的不同容器内,互不干扰,而他强大的不仅仅是搬运,而是对程序的统一管理,配置。
部署myqsl
正常我们再linux上部署mysql ,我们需要找到包,对应版本等一系列的复杂的操作,而安装了docker以后,我们只需要几个简单的命令 就可以 部署mysql ,先把镜像拉取到docker上,然后在创建容器,这样mysql就部署好了
docker run -d \ --name mysql \ -p 3306:3306 \ -e TZ=Asia/Shanghai \ -e MYSQL_ROOT_PASSWORD=123 \ mysql
以上就是mysql的命令
基础命令
用图像来表示 docker上的部署流程
以mysql为例,我们部署mysql ,先从镜像仓库pull下来mysql的镜像,然后docker run ,添加容器,而每个容器都是独立的,也就意味着 我们可以用docker 直接部署一个mysql集群 ,也就是多个容器 ,但是目前来说并没有这个必要
我们也可以 手动拉取 镜像 ,比如把一个nginx的tar包传入到虚拟机中 ,我们用docker load 命令 可以下载到 我们的镜像仓库中,也可以用save命令 把一个tar包 导出来
# Docker开机自启 systemctl enable docker # Docker容器开机自启 docker update --restart=always [容器名/容器id]
假如 我们现在需要 从镜像仓库拉取一个nginx 镜像
我们需要怎么做
nginx镜像拉取使用
# 第2步,拉取Nginx镜像
docker pull nginx
# 第3步,查看镜像
docker images
# 结果如下:
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 16 months ago 141MB
mysql latest 3218b38490ce 17 months ago 516MB
# 第4步,创建并允许Nginx容器
docker run -d --name nginx -p 80:80 nginx
# 第5步,查看运行中容器
docker ps
# 也可以加格式化方式访问,格式会更加清爽
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"
# 第6步,访问网页,地址:http://虚拟机地址
# 第7步,停止容器
docker stop nginx
# 第8步,查看所有容器
docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"
# 第9步,再次启动nginx容器
docker start nginx
# 第10步,再次查看容器
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"
# 第11步,查看容器详细信息
docker inspect nginx
# 第12步,进入容器,查看容器内目录
docker exec -it nginx bash
# 或者,可以进入MySQL
docker exec -it mysql mysql -uroot -p
# 第13步,删除容器
docker rm nginx
# 发现无法删除,因为容器运行中,强制删除容器
docker rm -f nginx
命令别名
正常我们查看 docker 的镜像 我们使用的命令为
docker images 这样我们每次输入重复的单词 就显得太麻烦了 我们就可以简化这种方法
# 修改/root/.bashrc文件
vi /root/.bashrc
内容如下:
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
我们 的 dis 是不是等于 docker images 所以以后 我们就可以 直接输入 dis 就相当与 docker images 命令 ,相应的 其他命令别名 也可以照葫芦画瓢自己来进行设置
数据卷
容器是一个隔离的环境,我们程序内的所有文件 配置运行 时候都在容器内部,所以以后我们想要对容器中配置进行修改 之类的操作会十分的不方便
所以我们怎么办呢 ?我们可以采用数据卷的形式,就是在我们的虚拟机上创建一个文件夹,与容器内部的一些文件 进行相互映射,也就是一个沟通桥梁,后期我们直接修改文件夹中的内容,直接映射到容器中去,是不是就方便许多,沟通桥梁的建立也称作挂载
而在 我们的虚拟机上 也有一个相应的目录来专门存放我们数据卷的目录
/var/lib/docker/volumes
这个目录就是默认的存放所有容器数据卷的目录,其下再根据数据卷名称创建新目录
容器与数据卷的挂载要在创建容器时配置,对于创建好的容器,是不能设置数据卷的。而且创建容器的过程中,数据卷会自动创建
下面演示 nginx下的html目录挂载
# 1.首先创建容器并指定数据卷,注意通过 -v 参数来指定数据卷
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx
# 2.然后查看数据卷
docker volume ls
# 结果
DRIVER VOLUME NAME
local 29524ff09715d3688eae3f99803a2796558dbd00ca584a25a4bbc193ca82459f
local html
# 3.查看数据卷详情
docker volume inspect html
# 结果
[
{
"CreatedAt": "2024-05-17T19:57:08+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/html/_data",
"Name": "html",
"Options": null,
"Scope": "local"
}
]
# 4.查看/var/lib/docker/volumes/html/_data目录
ll /var/lib/docker/volumes/html/_data
# 可以看到与nginx的html目录内容一样,结果如下:
总用量 8
-rw-r--r--. 1 root root 497 12月 28 2021 50x.html
-rw-r--r--. 1 root root 615 12月 28 2021 index.html
# 5.进入该目录,并随意修改index.html内容
cd /var/lib/docker/volumes/html/_data
vi index.html
# 6.打开页面,查看效果
# 7.进入容器内部,查看/usr/share/nginx/html目录内的文件是否变化
docker exec -it nginx bash
我们着重看这一条命令
html 代表的是虚拟机的一个文件名字叫html 后面冒号代表着挂载的容器内的目录
当然我们也可以在冒号左边直接指定一个目录 来进行挂载
这时候 我们docker inspect mysql 命令 查看一下mysql挂载的数据卷
我们发现 source 代表的是 宿主机也就是我们虚拟机的目录 ,destination 代表着挂载的容器的目录
镜像
我们除了 在镜像仓库拉取镜像以外,我们也可以自己创建一个镜像,而创建一个镜像 需要多条命令,而有些命令又是重复的
,而镜像 就是一堆文件的集合
但是 我们运行一堆一堆的文件 然后 搞成一个镜像又太麻烦了 ,所以我们以 用dockerfile 把一些固定的命令统一处理,把需要自己处理的jar包之类的打包自己处理成镜像
比如说 我们现在 有一个docker file文件 里面写好了如下命令
# 基础镜像
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-demo.jar包 , 我们只需要 拷贝 这个docekrfile文件 和jar包到虚拟机本地目录下
然后构建命令
# 进入镜像目录 cd /root/demo # 开始构建 docker build -t docker-demo:1.0 .
-
docker build
: 就是构建一个docker镜像 -
-t docker-demo:1.0
:-t
参数是指定镜像的名称(repository
和tag
) -
.
: 最后的点是指构建时Dockerfile所在路径,由于我们进入了demo目录,所以指定的是.
代表当前目录,也可以直接指定Dockerfile目录
我们也可以把最后的 . 替换成 dockerfile的目录 这样一个镜像就创建好了