该笔记是根据B站Up主——遇见狂神说,讲解的视频记录完成
遇见狂神说:https://space.bilibili.com/95256449
Docker常用命令
Docker官网:https://www.docker.com/
第一部分
一、帮助命令
docker version # 显示docker的版本信息
docker info # 显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help # 帮助命令
二、镜像命令
安装镜像的搜索网址:
https://hub.docker.com/
2.1、下载镜像
docker images # 查看所有本地主机上的镜像
docker search mysql # 搜索镜像
docker pull --help # 下载镜像
docker pull mysql:5.7 # 指定MySQL的版本
2.2、删除镜像
docker rmi -f id # 删除指定的镜像,remove image,加上镜像ID
docker rmi -f id id id # 删除多个镜像
docker rmi -f $(docker image -aq) # 批量删除全部的image(-f表示全部删除,即force,-ap查询命令)
三、容器命令
下载CentOS镜像
docker pull centos
新建容器并启动
docker run --help
docker run [可选参数] image
# 参数说明
--name="Name" 容器名字 Tomcat1 Tomcat2 用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口,-p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
-P 随机指定端口
启动并进入容器
docker run -it centos /bin/bash
从容器中退回主机
exit # 直接停止容器并退出
Ctrl + P + Q # 容器不停止退出
ls
列出所有的运行容器
docker ps
-a # 列出当前正在运行的容器,带出历史运行过的容器
-n=? # 显示最近创建的容器
-q # 只显示容器的编号
docker ps -a
删除容器
docker rm 容器id # 删除指定的容器,不能删除正在运行的容器,如果要强制删除,加采纳数rm -f
docker rm -f $(docker ps -aq) # 删除所有的容器
docker ps -a -q | xargs docker rm # 删除所有的容器(管道命令)
启动和停止容器的操作
docker start 容器ID # 启动容器
docker restart 容器ID # 重启容器
docker stop 容器ID # 停止正在运行的容器
docker kill 容器ID # 强制停止当前容器
四、常见其他命令
后台启动容器
docker run -d 镜像名
docker run -d centos
# 问题:docker ps,发现centos停止了
# 常见的坑:docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
# Nginx容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序运行了
查看日志
docker logs --help
docker logs -f -t --tail 容器ID # 容器如果没有日志
# 自己编写shell脚本
"while true;do echo OriginalCoder;sleep 1;done"
docker run -d centos /bin/sh -c "while true;do echo OriginalCoder;sleep 1;done"
docker ps # 查看容器ID
显示日志
-tf # 显示日志(-t:时间戳,-f:持续显示日志)
--tail number # 要显示的日志条数
docker logs -ft --tails 10 容器ID(10代表打印的条数)
查看容器中进程信息ps
docker ps # 查看容器ID
docker top 容器ID
查看镜像的元数据
docker inspect --help
docker ps -a
docker inspect 容器ID
进入当前正在运行的容器
通常情况下,容器都是后台运行的,需要进入容器中,修改一些配置
# 方式一
docker exec -it 容器ID /bin/bash
ls
ps -ef
# 方式二
docker attach 容器ID
区别
# docker exec 进入容器后开启一个新的终端,可以在里面操作
# docker attach 进入容器正在执行的终端,不会启动新的进程
从容器内拷贝文件到主机上
docker cp 容器ID: 容器内路径 目的主机路径
docker ps
docker images
docker run -it centos /bin/bash
docker ps
docker attach 容器ID
cd /home
ls
容器内新建一个文件
# touch test.java
exit
docker ps -a
# 将这个文件拷贝出来到主机上
docker cp 容器ID:/home/test.java /home
ls
五、 总结
attach Attach to a running container #当前shell下attach连接指定运行镜像
build Build an image from a Dockerfile #通过Dockerfile定制镜像
commit Create a new image from a containers changes #提交当前容器为新的镜像
cp Copy files/folders from a container to a HOSTDIR or to STDOUT #从容器中拷贝指定文件或者目录到宿主机中
create Create a new container #创建一个新的容器,同run 但不启动容器
diff Inspect changes on a containers filesystem #查看docker容器变化
events Get real time events from the server#从docker服务获取容器实时事件
exec Run a command in a running container#在已存在的容器上运行命令
export Export a containers filesystem as a tar archive #导出容器的内容流作为一个tar归档文件(对应import)
history Show the history of an image #展示一个镜像形成历史images List images #列出系统当前镜像
import Import the contents from a tarball to create a filesystem image #从tar包中的内容创建一个新的文件系统映像(对应export)
info Display system-wide information #显示系统相关信息
inspect Return low-level information on a container or image #查看容器详细信息
kill Kill a running container #kill指定docker容器
load Load an image from a tar archive or STDIN #从一个tar包中加载一个镜像(对应save)
login Register or log in to a Docker registry#注册或者登陆一个docker源服务器
logout Log out from a Docker registry #从当前Docker registry退出
logs Fetch the logs of a container #输出当前容器日志信息
pause Pause all processes within a container#暂停容器
port List port mappings or a specific mapping for the CONTAINER #查看映射端口对应的容器内部源端口
ps List containers #列出容器列表
pull Pull an image or a repository from a registry #从docker镜像源服务器拉取指定镜像或者库镜像
push Push an image or a repository to a registry #推送指定镜像或者库镜像至docker源服务器rename Rename a container #重命名容器
restart Restart a running container #重启运行的容器
rm Remove one or more containers #移除一个或者多个容器
rmi Remove one or more images #移除一个或多个镜像(无容器使用该镜像才可以删除,否则需要删除相关容器才可以继续或者-f强制删除)
run Run a command in a new container #创建一个新的容器并运行一个命令
save Save an image(s) to a tar archive#保存一个镜像为一个tar包(对应load)
search Search the Docker Hub for images #在docker
hub中搜索镜像
start Start one or more stopped containers#启动容器
stats Display a live stream of container(s) resource usage statistics #统计容器使用资源
stop Stop a running container #停止容器
tag Tag an image into a repository #给源中镜像打标签
top Display the running processes of a container #查看容器中运行的进程信息
unpause Unpause all processes within a container #取消暂停容器
version Show the Docker version information#查看容器版本号
wait Block until a container stops, then print its exit code #截取容器停止时的退出状态值
六、练习
Docker安装Nginx
PS:建议在DockerHub上搜索镜像,这样你可以找到自己想要的镜像版本,地址:https://hub.docker.com/
docker search nginx
docker push nginx
docker images
# -d 后台运行
# --name 给容器命名
# -p 宿主机端口:容器内端口
docker run -d --name Nginx01 -p 3344:80 nginx
# 测试
curl localhost:3344
# 进入容器
docker exec -it nginx01 /bin/bash
whereis nginx
cd /etc/nginx
ls
上面代码可能涉及到的问题:
# 永久关闭防火墙
systemctl disable firewalld.service
端口暴露的概念
思考问题:我们每次修改Nginx的配置文件,都需要进入容器内部,十分麻烦。可以在容器外提供一个映射的路径,达到在容器修改文件名,容器内部就可以自动修稿同步?-v,数据卷
-v /usr/share/nginx:/user/nginx
Docker安装Tomcat
# 官方的使用
docker run -it --rm tomcat:9.0
# 之前启动的都是后台,停止了容器之后,容器还是可以查到,docker run -it --rm ,一般用来测试,用完即删
# 建议使用以下
docker pull tomcat:9.0 # 下载Tomcat
docker images
# 启动运行
docker run -d -p 3355:8080 --name tomcat tomcat
说明:通过以上方式就能测试访问成功,但是通过外网访问时,出现404
# 进入容器
docker exec -it tomcat01 /bin/bash
# 发现问题:1.Linux命令少了;2.没有webapps。 原因:阿里云镜像默认是最小的镜像,所以不必要的都被剔除
Docker安装Redis
docker pull redis
docker image inspect redis:latest
七、Commit镜像
docker commit 提交容器成为一个新的副本
docker commti -m "提交的描述信息" -a="作者" 容器ID 目标镜像名:[TAG]
docker images
docker run -it -p 8080:8080 镜像名
docker ps
docker exec -it 容器ID /bin/bash
docker commit -a="作者" -m="描述信息" 容器ID 新容器名称:表情
八、容器数据卷
什么是容器数据卷?
将应用和环境,打包成一个镜像。数据如果都在容器中,那么容器删除,数据就会丢失。
需求:数据可以持久化
MySQL:容器删了,就相当于删库跑路!需求
:MySQL数据可以存储在本地!
容器之间有一个数据共享的技术!Docker容器中产生的数据,同步到本地!这就是卷技术。
目录的挂载, 将我们容器内的目录,挂载到Linux上。
总结
:容器的持久化和同步操作!容器间也是可以数据共享的!
使用数据卷
方式一:直接使用命令来挂载 -V
docker run -it -V 主机目录 容器内目录
# 测试
docker run -it -v /home/ceshi:/home centos /bin/bash
# 回到容器之外的控制台,使用以下命令,查看是否挂载成功
docker inspect 容器ID
测试文件的同步
再次测试
1、停止容器
2、宿主机上修改文件
3、启动容器
4、容器内的数据依旧是同步的
好处:我们以后修改只需要在本地修改即可,容器内自动同步!
第二部分
一、实战:安装MySQL
思考:MySQL的数据持久化问题
# 获取镜像
docker search mysql
docker pull mysql:5.7
# 运行容器,需要做数据挂载
# 安装启动mysql,需要配置密码(注意点)
# 官方测试:docker run -it --network some-network --rm mysql mysql -hsome-mysql -uexample-user -p
# 运行
-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置
--name 容器名字
docker run -d -p 3310:3306 -v /home/mysql.conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
# 启动成功之后,可以在Windows本地机测试
假设我们将容器删除
docker rm -f mysql01
docker ps
docker ps -a
回到宿主机查看,发现数据都还在! 我们挂载到本地的数据卷没有丢失,这就实现了容器数据持久化功能。
二、具名挂载和匿名挂载
# 匿名挂载
-v 容器内路径
docker run d -P --name nginx01 -v /etc/nginx nginx
# 查看所有数据卷的情况
docker volume ls
三、DockerFile
DockerFile就是用来构建docker镜像的构建文件!命令脚本
mkdir docker-test-volume
ls
pwd
cd docker-test-volume/
pwd
# 通过下面这个脚本,可以生成镜像,镜像是一层一层的,脚本是一层层的命令,每一个命令都是一层
vim dockerfile1
FROM centos
VOLUME ['volume01','volume02']
CMD echo "----end----"
CMD /bin/bash
ESC
:wq
# 查看dockerfile1
cat dockerfile1
#
docker build -f /home/docker-test--volume/docekrfile1 -t rich/centos:1.0 .
启动自己写的容器
这个卷和外部一定有一个同步的目录
四、数据卷容器
五、SpringBoot+Vue博客打包Docker镜像
1、构建SpringBoot项目
2、打包应用
3、编写DockerFile
4、构建镜像
5、发布运行
以后在使用Docker的时候,给别人一个Docker的镜像就可以
Docker Compose
Docker Swarm
CI/CD之Jenkins
,‘volume02’]
CMD echo “----end----”
CMD /bin/bash
ESC
:wq
查看dockerfile1
cat dockerfile1
docker build -f /home/docker-test–volume/docekrfile1 -t rich/centos:1.0 .
启动自己写的容器
[外链图片转存中...(img-IZW2CC6R-1626020303473)]
这个卷和外部一定有一个同步的目录
### 四数据卷容器
[外链图片转存中...(img-DttAw1Lb-1626020303474)]
### 五、SpringBoot+Vue博客打包Docker镜像
1、构建SpringBoot项目
2、打包应用
3、编写DockerFile
4、构建镜像
5、发布运行
以后在使用Docker的时候,给别人一个Docker的镜像就可以
#### Docker Compose
#### Docker Swarm
#### CI/CD之Jenkins