What is Docker?
最近学习Docker容器技术,所以自己做了一些笔记,然后准备慢慢学习,慢慢的补充更新这篇文章。
最新一次更新 2024.7.22 发布文章
1、docker安装
环境准备
1、CentOS 7
2、远程连接工具
环境查看
[root@VM-16-13-centos ~]# uname -r
3.10.0-1160.88.1.el7.x86_64
[root@VM-16-13-centos ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
安装
1、帮助文档
# 1、卸载旧的docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 2、需要的安装包
yum install -y yum-utils
# 3、设置镜像仓库
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable
# 4、更新索引
yum makecache fast
# 5、安装docker相关的
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 6、启动docker
systemctl enable docker
# 7、查看版本
docker version
[root@VM-16-13-centos ~]# docker version
Client: Docker Engine - Community
Version: 26.1.4
API version: 1.45
Go version: go1.21.11
Git commit: 5650f9b
Built: Wed Jun 5 11:32:04 2024
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 26.1.4
API version: 1.45 (minimum version 1.24)
Go version: go1.21.11
Git commit: de5c9cf
Built: Wed Jun 5 11:31:02 2024
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.33
GitCommit: d2d58213f83a351ca8f528a95fbd145f5654e957
runc:
Version: 1.1.12
GitCommit: v1.1.12-0-g51d5e94
docker-init:
Version: 0.19.0
GitCommit: de40ad0
# 8、下载远程镜像helloworkd
docker run hello-world
# 9、查看镜像列表
docker images
[root@VM-16-13-centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 2 years ago 13.3kB
卸载docker
# 1、卸载依赖
yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
# 2、删除资源
rm -rf /var/lib/docker
# /var/lib/docker 默认资源路径
2、阿里云镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["用你自己的加速链接"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
3、Hello-world 流程回顾
4、docker 常用命令
4.1、帮助命令
docker version # 显示docker版本信息
docker info #显示docker系统信息,包括镜像和容器的数量
docker 命令 --help # 帮助命令
4.2、镜像命令
docker images
# 列出所有镜像
[root@VM-16-13-centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 c20987f18b13 2 years ago 448MB
hello-world latest feb5d9fea6a5 2 years ago 13.3kB
docker search 镜像名
# 搜索镜像
[root@VM-16-13-centos ~]# docker search mysql --limit=2
NAME DESCRIPTION STARS OFFICIAL
mysql MySQL is a widely used, open-source relation… 15219 [OK]
mariadb MariaDB Server is a high performing open sou… 5789 [OK]
[root@VM-16-13-centos ~]# docker search mysql --limit=5
NAME DESCRIPTION STARS OFFICIAL
mysql MySQL is a widely used, open-source relation… 15219 [OK]
mariadb MariaDB Server is a high performing open sou… 5789 [OK]
phpmyadmin phpMyAdmin - A web interface for MySQL and M… 1004 [OK]
percona Percona Server is a fork of the MySQL relati… 629 [OK]
circleci/mysql MySQL is a widely used, open-source relation… 30
docker pull 镜像名
# 下载镜像
docker pull 镜像名:[指定版本]
[root@VM-16-13-centos ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
72a69066d2fe: Pull complete
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
0ceb82207cd7: Pull complete
37f2405cae96: Pull complete
e2482e017e53: Pull complete
70deed891d42: Pull complete
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94 # 签名
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7 # 真实地址
[root@VM-16-13-centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 c20987f18b13 2 years ago 448MB
hello-world latest feb5d9fea6a5 2 years ago 13.3kB
docker rmi 镜像名
[root@VM-16-13-centos ~]# docker rmi 容器id # 删除一个
[root@VM-16-13-centos ~]# docker rmi 容器id 容器id 容器id 容器id # 删除多个
[root@VM-16-13-centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 c20987f18b13 2 years ago 448MB
hello-world latest feb5d9fea6a5 2 years ago 13.3kB
[root@VM-16-13-centos ~]# docker rmi -f $(docker images -aq)
Untagged: mysql:5.7
Untagged: mysql@sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Deleted: sha256:c20987f18b130f9d144c9828df630417e2a9523148930dc3963e9d0dab302a76
Deleted: sha256:6567396b065ee734fb2dbb80c8923324a778426dfd01969f091f1ab2d52c7989
Deleted: sha256:0910f12649d514b471f1583a16f672ab67e3d29d9833a15dc2df50dd5536e40f
Deleted: sha256:6682af2fb40555c448b84711c7302d0f86fc716bbe9c7dc7dbd739ef9d757150
Deleted: sha256:5c062c3ac20f576d24454e74781511a5f96739f289edaadf2de934d06e910b92
Deleted: sha256:8805862fcb6ef9deb32d4218e9e6377f35fb351a8be7abafdf1da358b2b287ba
Deleted: sha256:872d2f24c4c64a6795e86958fde075a273c35c82815f0a5025cce41edfef50c7
Deleted: sha256:6fdb3143b79e1be7181d32748dd9d4a845056dfe16ee4c827410e0edef5ad3da
Deleted: sha256:b0527c827c82a8f8f37f706fcb86c420819bb7d707a8de7b664b9ca491c96838
Deleted: sha256:75147f61f29796d6528486d8b1f9fb5d122709ea35620f8ffcea0e0ad2ab0cd0
Deleted: sha256:2938c71ddf01643685879bf182b626f0a53b1356138ef73c40496182e84548aa
Deleted: sha256:ad6b69b549193f81b039a1d478bc896f6e460c77c1849a4374ab95f9a3d2cea2
Untagged: hello-world:latest
Untagged: hello-world@sha256:2498fce14358aa50ead0cc6c19990fc6ff866ce72aeb5546e1d59caac3d0d60f
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
[root@VM-16-13-centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
4.3、容器命令
拉取容器
[root@VM-16-13-centos ~]# docker search centos --limit 4 # 搜索镜像
NAME DESCRIPTION STARS OFFICIAL
centos DEPRECATED; The official build of CentOS. 7744 [OK]
kasmweb/centos-7-desktop CentOS 7 desktop for Kasm Workspaces 45
bellsoft/liberica-openjdk-centos Liberica is a 100% open-source Java implemen… 4
rancher/os-centosconsole 0
[root@VM-16-13-centos ~]# docker pull centos # 拉取镜像
Using default tag: latest
latest: Pulling from library/centos
a1d0c7532777: Pull complete
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
新建容器并且启动
[root@VM-16-13-centos ~]# docker images # 查询镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5d0da3dc9764 2 years ago 231MB
[root@VM-16-13-centos ~]# docker run -it centos /bin/bash # 运行并且进入镜像
# 参数说明
--name "name" 容器名字 tomcat1 tomcat2 用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器端口 -p 8080:8080
-p 主机端口:容器端口
-p 容器端口
-p 随机指定端口
[root@955ddf7860fb /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@955ddf7860fb /]# exit # 退出命令
exit
[root@VM-16-13-centos ~]#
列出所有运行的容器
# docker ps
-a # 列出所有正在运行的容器 + 运行过的容器
-n=1 # 只显示一条
-q # 只显示编号
[root@VM-16-13-centos /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@VM-16-13-centos /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
955ddf7860fb centos "/bin/bash" 7 minutes ago Exited (0) About a minute ago pedantic_lamport
021684c1e1b0 feb5d9fea6a5 "/hello" 4 hours ago Exited (0) 4 hours ago unruffled_tharp
退出容器
exit # 直接停止容器并且并退出
Ctrl + P + Q # 容器不停退出
删除容器
docker rm 容器id # 删除容器,但是运行中的容器强制删除需要加-f docker rm -f 容器id
docker rm -f $(docker ps -aq) # 删除所有容器
启动和停止容器
docker start 容器id # 启动一个关闭的容器
docker restart 容器id # 重新启动容器
docker stop 容器id # 停止一个容器
docker kill 容器id # 强制杀死一个容器
4.4、常用其他命令
进入当前正在运行的容器
# 命令
docker exec -it 容器id
# 测试
[root@VM-16-13-centos /]# docker exec -it 6484881bc68e /bin/bash
[root@6484881bc68e /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@6484881bc68e /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 08:09 pts/0 00:00:00 /bin/bash
root 20 0 0 08:16 pts/1 00:00:00 /bin/bash
root 35 20 0 08:18 pts/1 00:00:00 ps -ef
1、启动docker服务
sudo service docker start
2、停止docker服务
sudo service docker stop
3、检查docker 守护进程是否在运行
sudo docker stats
4、查看docker相关信息
sudo docker info
5、列出所有容器
sudo docker ps -a
6、最后一次运行的容器
sudo docker ps -l
7、重新启动已停止的容器
sudo docker start 容器名(也可以使用容器ID)
8、获取容器的日志
sudo docker logs 容器名
9、获取最后几条日志
sudo docker -f 容器名
10、列出镜像
sudo docker images
11、拉取镜像
sudo docker pull 镜像名
12、删除所有容器
sudo docker rm $(docker ps -a -q)
13、删除单个容器
sudo docker rm 容器名
14、删除所有镜像
sudo docker rmi $(docker images | grep none | awk '{print $3}' | sort -r)
15、保存镜像
sudo docker save 镜像名 > /home/新镜像名.tar
16、加载自定义镜像
sudo docker load < /home/自定义镜像
17、获取容器更多信息
sudo docker inspect 容器名
5、dockerfile
5.1、springboot项目打包
# 先clear 在package
5.2、创建文件夹 把.jar放进创建的目录
FROM #基础镜像,一切从这里开始构建。
MAINTAINER #镜像是谁写的,姓名+邮箱
RUN #镜像构建的时候需要运行的命令
ADD #步骤:tomcat镜像,这个tomcat压缩包!添加内容
WORKDIR #镜像的工作目录
VOLUME #挂载的目录
EXPOST #保留端口配置
CMD #指定这个容器启动的时候要运行的命令,只有一个会生效,可被替代。
ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令。
ONBUILD #当构建一个被集成DockerFile这个时候就会运行ONBUILD的指令。触发指令。
COPY #类似ADD,将我们文件拷贝到镜像中。
ENV #构建的时候设置环境变量。
在www下面的springboot目录下创建dockerFile
dockerFile:dockerfile是用来构建docker镜像的文件,命令参数脚本
# 基于java镜像创建新镜像
FROM openjdk:11
# 作者
MAINTAINER onlysheep<onlysheepen@126.com>
#开放8886端口
EXPOSE 8886
#规定时区等环境
ENV TZ=Asia/Shanghai
RUN ln -sf /usr/share/zoneinfo/{TZ} /etc/localtime &&echo "{TZ}" > /etc/timezone
# 将jar包添加到容器中并更名为app.jar
ADD mybatis-flex-project-1.0-SNAPSHOT.jar /app.jar
# 运行jar包
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-jar","/app.jar"]
5.3、创建docker镜像
docker build -t [imageName:spring] .
5.4、查看镜像暴露端口 查看到暴露端口为我们设置的8849端口号
5.5 、在镜像的基础上创建容器
docker run --name spring2 -d -p 8002:8001 spring
docker run --name [容器名] -d # 后台运行 -p # 设置端口 8002 # 主机端口:8001 # jar包容器内端口 spring [镜像名]
docker run -d -p 3307:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=cheny1119 --name mysql0 mysql:5.7
docker run -d -p 3308:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=cheny1119 --name mysql1 mysql:5.7
[卷挂载]
5.6、安装可视化面板portainer
docker run -d -p 8088:9000 \
> --restart=alaways -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
6、容器数据卷
6.1、什么是容器数据卷
docker的理念回顾
将应用和环境打包成一个镜像!
数据如果都放在容器中,那么我们容器删除,数据就会丢失!需求:数据可以持久化
MuSQL容器删除了,就删库跑路了!需求:MySQL数据可以存储在本地!
容器之间有一个容器共享的技术!Docker中产生的数据,同步到本地!
这就是卷技术!目录的挂载,将我们容器内的目录挂载到linux本机上
总结:容器的持久化和同步操作!容器间也可以进行数据共享!
6.2、使用数据卷
方式一:直接使用命令挂载 -v
docker run -it -v 主机目录:容器内目录
方式二:具名挂载
方式二:匿名挂载
docker run -it -v 容器目录 # 主机目录为默认
未完待续......