Docker笔记

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、阿里云镜像加速

官网地址

image-20240717141812335

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 流程回顾

image-20240717142804189

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放进创建的目录

img

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端口号

image-20240718135600325

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本机上

image-20240719143935389

总结:容器的持久化和同步操作!容器间也可以进行数据共享!

6.2、使用数据卷

方式一:直接使用命令挂载 -v

docker run -it -v 主机目录:容器内目录

方式二:具名挂载

方式二:匿名挂载

docker run -it -v 容器目录 # 主机目录为默认

未完待续......

忙碌了大半年工作,慢慢稳定开始回归发技术文章了 😄😄😄
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
快乐