文章目录
Docker的安装、使用以及常用的镜像命令
一、docker 安装
命令安装
复制粘贴执行
# 1、如果之前安装过docker,需要自行卸载
sudo yum remove docker docker-common docker-selinux docker-engine -y
# 2、初始化系统环境
sudo yum install -y gcc gcc-c++ yum-utils device-mapper-persistent-data lvm2 wget
# 3、安装yum源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum clean all
yum makecache
# 4、安装docker
yum install docker-ce -y --allowerasing
# 5、docker优化,配置镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xj6uu5rz.mirror.aliyuncs.com"]
}
EOF
# 6、设置开机自启动
systemctl enable --now docker
# 7、检查docker
docker -v
# 7、docker命令补全(安装docker后操作)
# 方式1:
curl https://raw.githubusercontent.com/docker/docker-ce/master/components/cli/contrib/completion/bash/docker -o /etc/bash_completion.d/docker.sh
# bash打开新窗口或重新登陆终端,测试:docker ima[tab]键测试补全
# 方式2:可能废弃了
yum install -y bash-completion
source /usr/share/bash-completion/completions/docker
source /usr/share/bash-completion/bash_completion
# docker-compose安装(自动获取最新最稳定的版本)
curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#为二进制文件添加可执行权限
chmod +x /usr/local/bin/docker-compose
#创建软连接
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 检查版本
docker-compose -v
脚本安装
执行脚本:
install_docker.sh
#!/bin/bash
echo '1、如果之前安装过docker,需要自行卸载'
sudo yum remove docker docker-common docker-selinux docker-engine -y
echo '2、初始化系统环境'
sudo yum install -y gcc gcc-c++ yum-utils device-mapper-persistent-data lvm2 wget
echo '3、安装yum源'
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum clean all
yum makecache
echo '4、安装docker'
yum install docker-ce -y --allowerasing
echo '5、docker优化,配置镜像加速器'
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xj6uu5rz.mirror.aliyuncs.com"]
}
EOF
echo '6、设置开机自启动'
systemctl enable --now docker
echo '7、检查docker'
docker -v
echo '7、docker命令补全(安装docker后操作)'
yum install -y bash-completion
source /usr/share/bash-completion/completions/docker
source /usr/share/bash-completion/bash_completion
echo 'docker-compose安装(自动获取最新最稳定的版本)'
curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
echo '为二进制文件添加可执行权限'
chmod +x /usr/local/bin/docker-compose
echo '创建软连接'
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
echo '检查版本'
docker-compose -v
docker 的基本使用
一、docker 中的三大基本概念
1.仓库
- 仓库是用来存放镜像的地方,比如一台计算机
2.镜像
- 镜像就是启动一个容器的模板,比如一个操作系统
3.容器
- 容器就是镜像启动起来的一个实例,对外提供服务的进程
4.总结
-
仓库 < 镜像 < 容器
-
容器是基于镜像运行的,而镜像是放在仓库里的
-
凌驾于Linux之上的微型操作系统<微型镜像<微型服务
二、docker 镜像相关命令及实例
1.常用镜像仓库
官方仓库:hub.docker.com
自己的私有仓库:Harbor
阿里云私有仓库:registry.cn-hangzhou.aliyuncs.com
2.搜索镜像
#格式
docker search [镜像名称]
# 实例
[root@docker ~]# docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 6465 [OK]
···
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4jbTFPgW-1616643956759)(img/1616054667174.png)]
3.拉取镜像
格式
# 格式
docker pull [镜像名称]
# 实例
[root@Centos7 ~]# docker pull redis
Using default tag: latest
latest: Pulling from library/redis
# 镜像层
a076a628af6f: Already exists
f40dd07fe7be: Pull complete
ce21c8a3dbee: Pull complete
ee99c35818f8: Pull complete
56b9a72e68ff: Pull complete
3f703e7f380f: Pull complete
# 镜像ID号(镜像ID号是全球唯一)
Digest: sha256:0f97c1c9daf5b69b93390ccbe8d3e2971617ec4801fd0882c72bf7cad3a13494
# 镜像下载状态
Status: Downloaded newer image for redis:latest
# 镜像的全称(镜像的tag)
docker.io/library/redis:latest
拉取国外镜像
用途:可拉取国外镜像,拉下后可重新打一个标签以供使用;
使用方式例:sh pull.sh k8s.gcr.io/coredns:1.7.0
cat > pull.sh <<EOF
#/bin/bash
# 参考:https://cloud.tencent.com/developer/article/1353088
# 用法:pull国外镜像时,命令为:sh /root/pull.sh gcr.io/google-samples/xtrabackup:1.0
image=$1
echo $1
img=`echo $image | sed 's/k8s\.gcr\.io/anjia0532\/google-containers/g;s/gcr\.io/anjia0532/g;s/\//\./g;s/ /\n/g;s/_/-/g;s/anjia0532\./anjia0532\//g' | uniq | awk '{print ""$1""}'`
echo "docker pull $img"
docker pull $img
echo "docker tag $img $image"
docker tag $img $image
EOF
4.查看当前系统上的有哪些镜像
# 格式
docker images 或者 docker image ls
# 参数
-q : 只显示镜像ID
[root@Centos7 ~]# docker images -q
621ceef7494a
f6d0b4767a6c
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v693ifLo-1616643956763)(img/1616055423200.png)]
5.获取镜像的详细信息
# 格式
docker inspect [镜像名称或镜像ID]
# 参数
-f : 格式化输出
[root@Centos7 ~]# docker inspect -f '{{.Id}}' 621ceef7494a
sha256:621ceef7494adfcbe0e523593639f6625795cc0dc91a750629367a8c7b3ccebb
[root@Centos7 ~]# docker inspect -f '{{.ContainerConfig.Hostname}}' redis
16535cfaf84a
6.登录镜像仓库
# 格式
docker login
注: 默认情况下,docker login登录的是官方仓库,如果登录其他镜像仓库则需要指定镜像仓库的URL连接。
# 实例
[root@Centos7 ~]# docker login registry.cn-hangzhou.aliyuncs.com
Username: yangyang091022
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
[root@Centos7 ~]# cat ~/.docker/config.json
{
"auths": {
"registry.cn-hangzhou.aliyuncs.com": {
"auth": "eWFuZ3lhbmcwOTEwMjI6Y2hlbjE4NzkwMDcwODMw"
}
}
}
# 参数
--username|-u : 指定用户名
--password|-p : 指定密码
7.为镜像标签
# 镜像标签的构成
docker.io/library/redis:latest
docker.io : 镜像仓库的URL
library :镜像仓库命名空间
redis : 镜像名称
latest : 镜像版本号
# 打标签
# 格式
docker tag [镜像ID] 镜像标签
[root@Centos7 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 621ceef7494a 2 months ago 104MB
nginx latest f6d0b4767a6c 2 months ago 133MB
[root@Centos7 ~]# docker tag 621ceef7494a registry.cn-hangzhou.aliyuncs.com/alvinos/redis:v2
[root@Centos7 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 621ceef7494a 2 months ago 104MB
registry.cn-hangzhou.aliyuncs.com/alvinos/redis v2 621ceef7494a 2 months ago 104MB
nginx latest f6d0b4767a6c 2 months ago 133MB
8.镜像上传
# 格式
docker push [镜像标签]
# 注:要想上传镜像,首先得登录镜像仓库,其次设置对应镜像仓库的tag
[root@Centos7 ~]# docker push registry.cn-hangzhou.aliyuncs.com/alvinos/redis:v2
The push refers to repository [registry.cn-hangzhou.aliyuncs.com/alvinos/redis]
3480f9cdd491: Pushed
a24a292d0184: Pushed
f927192cc30c: Pushed
1450b8f0019c: Pushed
8e14cb7841fa: Pushed
cb42413394c4: Pushed
v2: digest: sha256:7ef832c720188ac7898dbd8d1e237b0738e94f94fc7e981cb7b8efe84555e892 size: 1572
9.镜像的删除
# 格式
docker rmi [镜像名称或者镜像ID]
# 实例
[root@Centos7 ~]# docker rmi nginx
# 参数
-f : 强制删除
[root@Centos7 ~]# docker rmi -f nginx
Untagged: nginx:latest
Untagged: nginx@sha256:10b8cc432d56da8b61b070f4c7d2543a9ed17c2b23010b43af434fd40e2ca4aa
# 注:当有容器正在使用镜像时,强制删除镜像,只能删除镜像的所有tag, 不会删除镜像。
10.清空镜像
# 格式
docker image prune
# 实例
[root@Centos7 ~]# docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
# 参数
-a : 删除所有镜像
[root@Centos7 ~]# docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: redis:latest
untagged: redis@sha256:0f97c1c9daf5b69b93390ccbe8d3e2971617ec4801fd0882c72bf7cad3a13494
untagged: registry.cn-hangzhou.aliyuncs.com/alvinos/redis:v2
untagged: registry.cn-hangzhou.aliyuncs.com/alvinos/redis@sha256:7ef832c720188ac7898dbd8d1e237b0738e94f94fc7e981cb7b8efe84555e892
deleted: sha256:621ceef7494adfcbe0e523593639f6625795cc0dc91a750629367a8c7b3ccebb
deleted: sha256:de66cfbf4712b8ba9ef292e08ef7487be26d9d21b350548e400ae351405d820e
deleted: sha256:79b2381e35429e8fc04d31b3445f069c22d288bf5c4cba7b7c10004ff78ae201
deleted: sha256:1d047d19be363b00139990d4d7f392dabdb0809dbc9d0fbe67c1f15b8caed27a
deleted: sha256:8c41f4e708c37059df28ae1cabc200a6db2fee45bd3a2cadcf70f2765bb68730
deleted: sha256:b51317bef36fe1900be48402c8a41fcd9cdb6b8950c10209f764473cb8323371
Total reclaimed space: 35.04MB
[root@Centos7 ~]#
11.查看镜像历史(镜像的构建历史)
# 格式
docker history [镜像ID或镜像名称]
# 实例
[root@Centos7 ~]# docker history alpine
IMAGE CREATED CREATED BY SIZE COMMENT
7731472c3f2a 2 months ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B
<missing> 2 months ago /bin/sh -c #(nop) ADD file:edbe213ae0c825a5b… 5.61MB
12.保存镜像(commit)
# 保存正在运行的容器直接为镜像
# 格式:
docker commit [容器ID|容器名称]
# 实例
[root@Centos7 ~]# docker commit -a "Alvin" -m "这是一个docker镜像" -p be3b92e2886b test:v1
sha256:4a06cd2af42877b5e2908073061f7ae1bf9e308a470bdfc0c6f906ef368aaed8
[root@Centos7 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test v1 4a06cd2af428 5 seconds ago 104MB
13.导出/导入镜像(export/import)
# 导出<<正在运行>>的容器为镜像tar包(不压缩,只打包)
- 只能导出运行中的镜像,需用docker ps命令获取ID号
- 不能导出没运行的镜像
## 保存容器为镜像
docker export [容器的ID] > [包名称]
# 实例
[root@Centos7 ~]# docker export be3b92e2886b > redis.tar
[root@Centos7 ~]# ll | grep redis
-rw-r--r--. 1 root root 104178688 Mar 18 17:30 redis.tar
## docker import [包名称] [自定义镜像名称]
# 实例,需指定tag标签信息,否则导入后无名
[root@Centos7 ~]# docker import redis.tar test:v3
sha256:7776db3402fb8d59f6121a3b1977b5e7016f4064cf59218fd1b06637cb0fca87
[root@Centos7 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test v3 7776db3402fb 6 seconds ago 101MB
14.导出/导入镜像(save/load)
# 导出镜像为tar包(不压缩,只打包)
#save导出,load导入
- save导出镜像时,无法自定义镜像名称
- save导出镜像时,如果使用ID保存则load导入镜像无名称,导入时只能用ID号来# 导入
- save导出镜像时,用名称导出,才能使用名称导入
# 导出镜像的格式:
docker save [镜像名称|镜像ID] > [包名称]
# 例1:包名导出
[root@docker ~]# docker save redis > redis.tar
[root@docker ~]# ll
-rw-r--r-- 1 root root 107700224 Mar 19 21:58 redis.tar
# 例2:ID号导出
[root@docker ~]# ll
-rw-r--r-- 1 root root 107699200 Mar 19 22:00 redis.tar
# 导入镜像的格式:
docker load < [包名称]
- 若导出的镜像包无名称,则只能用其ID号来导入~
# 删除redis原镜像,导入刚到出来的镜像
[root@docker ~]# docker rmi redis
[root@docker ~]# docker load < redis.tar
8e14cb7841fa: Loading layer [==================================================>] 338.4kB/338.4kB
1450b8f0019c: Loading layer [==================================================>] 4.191MB/4.191MB
f927192cc30c: Loading layer [==================================================>] 30.62MB/30.62MB
a24a292d0184: Loading layer [==================================================>] 1.536kB/1.536kB
3480f9cdd491: Loading layer [==================================================>] 3.584kB/3.584kB
Loaded image ID: sha256:621ceef7494adfcbe0e523593639f6625795cc0dc91a750629367a8c7b3ccebb
# 查看导入的镜像
[root@docker ~]# docker images
redis latest 621ceef7494a 2 months ago 104MB
# PS:若导入后名字有误,可以通过ID号来重新打一个标签(重命名),一般不会有问题
<none> <none> 621ceef7494a 2 months ago 104MB
[root@docker ~]# docker tag 621ceef7494a redis
15.保存镜像三种方式的区别
-
export/inport
-
适用于持久化容器(不是镜像),是导出容器当前的操作系统,不包含分层系统,仅包含当前系统中的状态,相当于虚拟机的快照
-
保存的镜像体积要小于save(但save保存更完全,export保存会丢掉一些不必要的数据)
-
export可以重命名镜像名称而save则不行
-
-
save/load
- 可以同时保存多个镜像而export则不行
- 适用于持久化镜像(不是容器),是保存一个完整的镜像,包含分层系统统一打包,相当于虚拟机的完整模板机
16.作业
- 使用Dockerfile构建一个LNMP(linux、nginx、mysql、php)