第一部分:本地克隆它人docker镜像,上传到自己docker hub仓库为己用

Docker是一种轻量级容器化技术,它能够将应用程序及其依赖项打包成一个独立的容器,提供了一种快速、可靠、可移植的方式来部署应用。而Docker Hub则是一个广受欢迎的公共镜像仓库,类似Github供开发者们分享、存储和获取镜像。

有时候看到自己喜欢的内容,万一哪一天作者修仙,删库飞升了,怎么办?这个时候克隆docker镜像,上传到自己docker hub仓库为己用就显得很有意义。

这次我就分两个部分来讲一下如何克隆镜像 如何修改镜像,上传到仓库为己用。

本次就以上一篇的独角数卡为例,为了都能看的懂,我傻瓜式从头教到尾

1.安装docker和docker-compose(装过可以忽略)

输入下面的命令,两个代码就可以,直接安装即可:

1
2
3
4
5

sudo apt-get update

sudo apt-get install docker docker-compose

2.创建安装的目录

1
2
3
4
5
6
7
8
9
10
11

sudo -i

mkdir -p /root/data/docker_data/shop

cd /root/data/docker_data/shop

mkdir storage uploads

chmod -R 777 storage uploads

3.创建一个env.conf文件,并且授予权限

1
2
3
4
5

touch env.conf

chmod -R 777 env.conf

4.编辑docker-compose.yml文件,输入以下命令:

1
2
3

vim docker-compose.yml

代码如下,直接复制即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

version: "3"

services:
web:
image: stilleshan/dujiaoka
environment:
# - INSTALL=false
- INSTALL=true
# - MODIFY=true
volumes:
- ./env.conf:/dujiaoka/.env
- ./uploads:/dujiaoka/public/uploads
- ./storage:/dujiaoka/storage
ports:
- 6789:80 # 6789可以改成任意服务器没有使用过的端口,80不要修改
restart: always

db:
image: mariadb:focal
restart: always
environment:
- MYSQL_ROOT_PASSWORD=changeyourpassword
- MYSQL_DATABASE=dujiaoka
- MYSQL_USER=dujiaoka
- MYSQL_PASSWORD=changeyourpassword
volumes:
- ./mysql:/var/lib/mysql

redis:
image: redis:alpine
restart: always
volumes:
- ./redis:/data


5.编辑env.conf文件

1
2
3

vim env.conf

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

APP_NAME=店铺
APP_ENV=local
APP_KEY=base64:rKwRuI6eRpCw/9e2XZKKGj/Yx3iZy5e7+FQ6+aQl8Zg=
APP_DEBUG=true
APP_URL=https://你的域名

LOG_CHANNEL=stack

# 数据库配置
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=dujiaoka
DB_USERNAME=dujiaoka
DB_PASSWORD=changeyourpassword

# redis配置
REDIS_HOST=redis
REDIS_PASSWORD=
REDIS_PORT=6379

BROADCAST_DRIVER=log
SESSION_DRIVER=file
SESSION_LIFETIME=120


# 缓存配置
# file为磁盘文件 redis为内存级别
# redis为内存需要安装好redis服务端并配置
CACHE_DRIVER=redis

# 异步消息队列
# sync为同步 redis为异步
# 使用redis异步需要安装好redis服务端并配置
QUEUE_CONNECTION=redis

# 后台语言
## zh_CN 简体中文
## zh_TW 繁体中文
## en 英文
DUJIAO_ADMIN_LANGUAGE=zh_CN

# 后台登录地址
ADMIN_ROUTE_PREFIX=/admin

# 是否开启https (前端开启了后端也必须为true)
# 后台登录出现0err或者其他登录异常问题,大概率是开启了https而后台没有开启,把下面的false改为true即可
ADMIN_HTTPS=false

6.检查端口是否被占用

1
2
3

lsof -i:6789

7.直接拉起镜像

1
2
3
4


docker-compose up -d

好了,接下来的安装过程我就直接忽略哈,一般问题不大,直接开始克隆过程了。

8.先登录到Docker Hub,输入命令后,填入账号密码,以完成登录

1
2
3

docker login

9.输入以下命令找到镜像的名称,stilleshan/dujiaoka

1
2
3
4

docker images #查看镜像命令,镜像的名称stilleshan/dujiaoka


10.之后重新标记镜像,可以使用docker tag命令重新标记你想要上传的镜像,后面记得加镜像标签

1
2
3

docker tag stilleshan/dujiaoka:latest 你的用户名/你的仓库名:latest

或者

1
2
3

docker tag (镜像id) 你的用户名/你的仓库名:latest

上面两种标记方法都是可行的,一种是镜像名称,一种是镜像id,记住不是容器id。之后会有两个镜像id一样的。

11.接着再输入docker images,查看通过tag标记的镜像,复制镜像的名称

12.最后上传镜像,可以使用以下命令将重新标记的镜像上传到仓库。

1
2
3

docker push 你的用户名/你的仓库名:latest

结束语录:

肿么样,是不是灰常的简单。细看整个过程无非就是克隆标记,push到仓库这么简单。一切顺利完成,你可以删除本地所有的文件 镜像 缓存,同时退出登录,在重新拉起镜像,查看是否
完整无暇。

最后最后,寄出本人的卸载大法:

a.删除创建的目录

1
2
3
4
5
6
7
8
9
10

sudo -i

cd /root/data/docker_data/shop

cd ..

rm -rf /root/data/docker_data/shop


b.删除镜像

1
2
3
4
5
6

docker images

docker rmi -f 镜像id #当然镜像名称也是可以的,推荐用id


c.进入本地环境目录删除(慎用)

1
2
3
4

var/lib/docker/overlay2 #除了L文件夹,其它全部删除,包括L文件夹里面的,留空就可以了


d.清理缓存和临时文件(非常慎重)

1
2
3
4

docker system prune -a


这将清除不再使用的镜像、容器和相关的缓存文件。请注意,这个命令会删除所有未使用的镜像和容器,包括本地未推送的镜像,所以请谨慎操作。