Docker-day1-安装+使用+常用镜像命令

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 run -d -P nginx

# 第二种方式
docker info

# 7、docker命令补全(安装docker后操作)
yum install -y bash-completion
source /usr/share/bash-completion/completions/docker
source /usr/share/bash-completion/bash_completion

# docker-compose安装
# 方式1:推荐
wget -P /usr/local/bin/docker-compose https://github.com/docker/compose/releases/download/v2.0.0-rc.3/docker-compose-linux-arm64
chmod +x /usr/local/bin/docker-compose

# 方式2:常失败
#curl -L https://github.com/docker/compose/releases/download/1.25.0-rc2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#chmod +x /usr/local/bin/docker-compose

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)
posted @ 2022-06-09 18:19  秋风お亦冷  阅读(367)  评论(0编辑  收藏  举报