Docker安装
Docker的基本组成
客户端 -------服务器--------仓库
镜像(image):
docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,如tomcat镜像===>run ===>容器(提供服务),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。
容器(container):
Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的。
启动、停止、删除、基本命令。
目前就可以把这个容器理解为就是一个简易的linux系统
仓库(repository):
仓库就是存放镜像的地方
仓库分为公有仓库和私有仓库
Docker Hub(默认是国外的)
阿里云…都有容器服务器(配置镜像加速!)
安装
查看自己Linux的系统
Distributor ID: Ubuntu
Description: Ubuntu 20.04.2 LTS
Release: 20.04
Codename: focal
Docker的常用命令
run的运行流程
开始—>Docker会在本机寻找镜像---->判断本机是否有这个镜像------>如果有,使用这个镜像运行
-------->如果没有,去DockerHub上下载,没找到的话则报错。
帮助命令
可以查看文档 https://docs.docker.com/engine/reference/
docker version # 现实docker的基本信息
docker info #查看docker的基本信息
docker --help #帮助命令
镜像命令
查看镜像
docker images #查看所有本地的主机上的镜像
-a, --all # 列出所有镜像
-q, --quiet # 只显示镜像的id
#docker images 出现的列名的解释
# REPOSITORY 镜像的仓库源
# TAG 镜像的标签
# CRTEATED 镜像的创建时间
#SIZE 镜像的大小
搜索镜像
docker search 镜像名字 #搜索镜像
# 可选项,通过搜藏来过滤
--filter=STARS=3000 # 搜索出来的镜像就是STARS大于3000的。
下载镜像
docker pull 镜像名[:tag] # 下载镜像 后面是版本 如果不写tag,默认就是latest
docker pull mysql:5.7 # 指定下载5.7的版本
docker pull mysql
docker pull docker.io/library/mysql:latest # 和上面的命令是等价的
删除镜像
docker rmi
docker rmi -f 容器id # 删除指定的镜像
docker rmi -f 容器id 容器id # 删除多个指定的镜像
docker rmi -f $(docker images -aq) #删除全部的镜像
容器命令
说明:我们有了镜像才可以创建容器,linux
# 下载镜像
docker pull centos
新建容器并启动
docker run[可选参数] image /bin/bash
#参数说明
--name="Name" #容器名字,用来区分容器
-d #后台方式运行
-it #使用交互方式运行,进入容器查看内容
-p #指定容器的端口 -p 8080:8080
-p ip:主机端口:容器端口 # 指定主机端口和容器端口 ---------->常用的方式
-p 容器端口 # 不往外面走了,只指定容器端口
容器端口
-P #随机指定端口
docker run --name=lyh_centos -it centos:7.5 /bin/bash
# 名字为lyh_centos
# 使用交互的方式
# centos的版本是7.5
#用bash方式运行
-----------------------------这样就进入了容器,相当于又创建了一个虚拟机-----------------------
dockeruser@gpu-Super-Server:~$ docker run --name=lyh_centos -it centos:7.5 /bin/bash
[root@a9529389dc6b /]# ls
bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
退出容器命令
exit #从容器中退回主机
ctrl+p+q #容器不停止推出
查看容器命令
docker ps #显示正在运行的容器
docker ps -a #显示所以的容器,包括不运行的
docker -n=? #显示最近?个被创建的容器
docker ps -q #只显示容器的编号
docker ps -aq #只显示容器的编号,显示所有的
删除容器
docker rm 容器id #删除指定容器---不能删除正在运行的容器,强制删除用下面的
docker rm -f $(docker ps -aq) #删除所有容器
docker -a -qlxargs docker rm # linux删除所有容器
启动和停止容器
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前正在运行的容器
常用其他命令
后台启动容器
docker run -d image #后台启用容器
-----------------------------------问题-----------------------------------
执行命令docker run -d centos ,再用docker ps 发现centos停止了
#常见的坑,docker容器使用后台运行时,就必须要有一个前台进程,docker发现没有应用,就会自动停止
#nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
查看日志
docker logs -tf --tail 10 容器id #显示十条该容器的日志
##使用 docker logs 命令查看容器的日志后,可以按下键盘上的 Ctrl + C 组合键来退出日志查看模式。
查看容器中的进程信息
docker top 容器id
# UID是用户id
#PID是副id #
#PPID是进程id
dockeruser@gpu-Super-Server:~$ docker top 868e835d6e0b
UID PID PPID C STIME TTY TIME CMD
10000 7352 7333 0 9月14 ? 00:00:00 /bin/sh /harbor/entrypoint.sh
10000 7470 7352 0 9月14 ? 00:18:17 /harbor/harbor_core
查看容器信息
docker inspect 容器id
进入当前正在运行的容器
# 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
# 命令
docker exec -it 容器id bashShell # 进入容器后开启一个新的终端,可以在里面操作(常用)
docker exec -it 容器id /bin/bash #具体的例子
#另一种
docker attach 容器id /bin/bash # 进入容器正在执行的终端,不会启动新的进程
从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目的的主机路径 #注意,这个要在目的主机中写这个copy文件
docker cp 868e835d6e0b:/home/test.java /home
#现在用的拷贝是一个手动的过程,未来我们-v卷的技术,可以实现
这是拷贝文件夹
docker cp 容器长ID:docker容器路径/文件夹 你的文件夹/
从主机拷贝文件到容器内
# 1 查找容器
docker ps -a
# 2 确定我们的容器名,并获取容器 长ID
docker inspect -f '{{.ID}}' your_NAME
# 拷贝本地文件到容器
docker cp 你的文件路径 容器长ID:docker容器路径
#拷贝文件夹到容器中
dcoekr cp 文件路径/w文件夹 docker cp 容器长ID:docker容器路径/文件夹 你的文件夹/
commit镜像
docker commit 提交容器成为一个新的副本
#命令和git原理类似
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[版本号]
# 该命令结束后 将提交的镜像放在你自己的docker中
#例如:
# 1、 启动一个默认的tomcat
# 2、发现这个默认的tomcat是没有webapps应用,镜像的原因,官方的镜像默认 webapps下面是没有文件的!
# 3、我自己拷贝进去了基本的文件
# 4、将我们操作的容器通过commit提交为一个镜像! 我们以后就使用我们修改过的镜像即可
容器数据卷
什么是容器数据卷
-
docker理念回顾:将应用和环境打包成一个镜像
-
数据? 如果数据都在容器中,那么我们容器删除,数据就丢失!
-
需要容器之间可以有一个数据共享的技术! Docker容器中产生的数据,同步到本地!这就是卷技术!目录的挂载,将我们容器内的目录,挂载到Linux上面!
#方式一:直接使用命令来挂载 -v
docker run -it -v 主机目录:容器内目录 镜像名 /bin/bash
#例如
docker run -it -v /home/ceshi:/home centos /bin/bash
-
测试
1、停止容器
2、宿主机上修改文件
3、启动容器
4、容器内的数据依旧是同步的
结论,容器数据卷不管是修改容器中的还是宿主机中的数据,挂卷的文件夹中的内容都是同步的。
好处:我们以后修改只需要在本地修改即可,容器内会自动同步
-v
docker run -it -v 主机目录:容器内目录 镜像名 /bin/bash
#例如
docker run -it -v /home/ceshi:/home centos /bin/bash
-
测试
1、停止容器
2、宿主机上修改文件
3、启动容器
4、容器内的数据依旧是同步的
结论,容器数据卷不管是修改容器中的还是宿主机中的数据,挂卷的文件夹中的内容都是同步的。
好处:我们以后修改只需要在本地修改即可,容器内会自动同步