Docker学习笔记01

本文详细介绍了Docker的基本概念,包括镜像、容器和仓库,并提供了在CentOS上安装Docker的步骤,包括使用仓库、包安装和官方脚本安装的方法。此外,还讲解了如何卸载Docker、配置镜像加速器以及验证其是否生效。最后,文中列举了Docker常用命令,包括管理镜像、容器的操作,并通过实例演示了如何下载、启动和停止容器,以及如何使用Docker运行Hello-World镜像来验证安装成功。
摘要由CSDN通过智能技术生成

1、简介

1.1 什么是Docker

  • Docker 是一个开源的应用容器引擎,基于 Go 语言并遵从 Apache2.0 协议开源;
  • Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化;
  • 容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低;
  • Docker 从 17.03 版本之后分为 CE(Community Edition-社区版)和 EE(Enterprise Edition-企业版)。

1.2 Docker的应用场景

  • Web应用的自动化打包和发布,自动化测试和持续集成、发布;
  • 在服务型环境中部署和调整数据库或其他的后台应用;
  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

1.3 友情链接

1.4 Docker的三个概念

在这里插入图片描述

  1. 镜像(Image):类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像。
  2. 容器(Container):类似于一个轻量级的沙盒,可以将其看作一个**极简的Linux系统环境(**包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。
  3. 仓库(Repository):类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。

2、CentOS Docker 安装

官方的安装文档:Install Docker Engine | Docker Documentation

2.1 卸载旧版本

不管有没有旧版本,都运行一下:

 sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2.2 安装方法

2.2.1使用仓库安装

  1. 安装yum-utils,然后设置一个稳定的仓库。

这里官网的仓库是外网的,所以我们设置案例的镜像仓库。

sudo yum install -y yum-utils
#官网的
 sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
#阿里的镜像仓库
yum-config-manager \
—add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  1. 安装Docker Engine
#先更新docker索引,非必须
yum makecache fast
#安装Docker Engine,过程中需要输入几次y来确认。
sudo yum install docker-ce docker-ce-cli containerd.io

docker-ce表示社区版本,docker-ee企业版,一般用第一个。

  1. 启动docker
 sudo systemctl start docker
  1. 验证docker是否安装成功

输入docker version查看是否安装成功

[root@muyi muyi]# docker version
Client: Docker Engine - Community
 Version:           20.10.8
 API version:       1.41
 Go version:        go1.16.6
 Git commit:        3967b7d
 Built:             Fri Jul 30 19:55:49 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.8
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.6
  Git commit:       75249d8
  Built:            Fri Jul 30 19:54:13 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.9
  GitCommit:        e25210fe30a0a703442421b0f60afac609f950a3
 runc:
  Version:          1.0.1
  GitCommit:        v1.0.1-0-g4144b63
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

  1. 运行hello-world镜像来验证docker安装成功

这里会先去远程仓库pull hello-world这个镜像,然后再用这个镜像创建一个容器实例。

 sudo docker run hello-world

如果运行成功就代表安装成功。

  1. 查看docker镜像:
 docker images

2.2.2 使用包安装

下载符合版本的.rpm文件安装。

1.去该网站https://download.docker.com/linux/centos/找选择我们CentOS版本,然后浏览x86_64/stable/Packages/并下载你想安装的Docker版本的.rpm文件。

2.安装

 sudo yum install /path/to/package.rpm

3.启动

 sudo systemctl start docker

4.运行hello-world

 sudo docker run hello-world

2.3 使用官方安装脚本自动安装

安装命令如下:

curl -fsSL https://get.docker.com | bash -s docker --mirror aliyun

也可以使用国内 daocloud 一键安装命令:

curl -sSL https://get.daocloud.io/docker | sh

2.3 卸载 docker

  1. 删除安装包:
yum remove docker-ce
  1. 删除镜像、容器、配置文件等内容:
rm -rf /var/lib/docker

/var/lib/docker就是docker的默认工作路径

2.4 Docker 镜像加速

国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务,例如:

  • 科大镜像:https://docker.mirrors.ustc.edu.cn/
  • 网易:https://hub-mirror.c.163.com/
  • 阿里云:https://<你的ID>.mirror.aliyuncs.com
  • 七牛云加速器:https://reg-mirror.qiniu.com

当配置某一个加速器地址之后,若发现拉取不到镜像,请切换到另一个加速器地址。国内各大云服务商均提供了 Docker 镜像加速服务,建议根据运行 Docker 的云平台选择对应的镜像加速服务。

阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,登陆后,左侧菜单选中镜像加速器就可以看到你的专属地址了.

在这里插入图片描述

方式二

也可以自己在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件):

{"registry-mirrors":["https://reg-mirror.qiniu.com/"]}
检查加速器是否生效

检查加速器是否生效配置加速器之后,如果拉取镜像仍然十分缓慢,请手动检查加速器配置是否生效,在命令行执行 docker info,如果从结果中看到了如下内容,说明配置成功。

$ docker info
Registry Mirrors:
    https://reg-mirror.qiniu.com #镜像地址

例如我的能看到是阿里的

在这里插入图片描述

3、Docker命令

Reference documentation | Docker Documentation

本节列举一些常用命令,更多命令查看官网文档或者中文文档

帮助信息:

#查看版本
docker version
#查看docker系统信息
docker info
#帮助命令
docker --help 

eg: docker images --help能查看dockers images的详细使用方式
在这里插入图片描述

note:下面的所有命令中,对容器的指定时,容器id很长,可以只写前几个就能被识别,比如前三个就能识别。

镜像命令:

列出镜像:

Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]
Options:
  -a, --all 显示所有镜像
  -f, --filter filter 使用过滤器过滤镜像
    dangling true or false, true列出没有标签的,false相反
    label (label=<key> or label=<key>=<value>),如果镜像设置有label,则可以通过label过 滤
    before (<image-name>[:<tag>], <image id> or <image@digest>) - 某个镜像前的镜像
    since (<image-name>[:<tag>], <image id> or <image@digest>) - 某个镜像后的镜像
    reference (pattern of an image reference) - 模糊查询,例:-- 
    filter=reference='busy*:*libc' 
  --format string 格式化输出
    .ID 镜像ID
    .Repository 镜像仓库
    .Tag 镜像tag
    .Digest Image digest
    .CreatedSince 创建了多久
    .CreatedAt 镜像创建时间
    .Size 镜像大小
-q, --quiet 只显示镜像ID

搜索镜像:

docker search [镜像名称]
#搜索收藏大于等于600
[root@docker01 ~]# docker search mysql -f stars=600
#搜索官方镜像
[root@docker01 ~]# docker search -f is-official=true mysql

下载镜像:

从镜像仓库中拉取或者更新指定镜像,在未声明镜像标签时,默认标签为latest。

Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST] 
Options: 
	TAG即版本
    -a 拉取某个镜像的所有版本
    --disable-content-trust 跳过校验,默认开启

#下载只指定版本的mysql,不指定版本下载最新的
[root@muyi muyi]# docker pull mysql:5.7
5.7: Pulling from library/mysql
33847f680f63: Pull complete  # 分层下载的过程,每层不一定按顺序完成,可能下面的层比上面的先下载完。
5cb67864e624: Pull complete 
1a2b594783f5: Pull complete 
b30e406dd925: Pull complete 
48901e306e4c: Pull complete 
603d2b7147fd: Pull complete 
802aa684c1c4: Pull complete 
5b5a19178915: Pull complete 
f9ce7411c6e4: Pull complete 
f51f6977d9b2: Pull complete 
aeb6b16ce012: Pull complete 
Digest: sha256:be70d18aedc37927293e7947c8de41ae6490ecd4c79df1db40d1b5b5af7d9596#镜像ID号,全球唯一
Status: Downloaded newer image for mysql:5.7 #下载状态
docker.io/library/mysql:5.7#镜像的全路径(镜像的tag)

删除镜像:

注意:删除镜像前必须先删除以此镜像为基础的容器。

Usage: docker rmi [OPTIONS] IMAGE [IMAGE...]
Options:
  -f, --force 强制删除
eg: 
删除一个:
docker rmi -f imageID 
删除多个:
docker rmi -f imageID1 imageId2 
删除所有:
docker rmi -f $(docker images -aq) 

容器命令

容器是以镜像为模板创建的,所以要先有镜像才可以创建容器,这里先下载一个centos镜像来测试学习。

列出容器

Usage: docker ps [OPTIONS]
Options:
  -a, --all 列出所有容器
  -f, --filter filter 使用过滤器过滤
  --format string 格式化输出
  -n, --last int 显示最后创建的n个容器
  -l, --latest 显示最后一个创建的容器
  -q, --quiet 只显示容器ID
  -s, --size 显示大小

创建并启动一个容器

Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Options:
  -d, --detach 后台以守护进程方式运行容器,并输出容器ID 
  -e, --env list 设置环境变量,该变量可以在容器内使用
  -h, --hostname string 指定容器的hostname
  -i, --interactive 以交互模式运行容器,通常与-t同时使用
  -l, --label list 给容器添加标签
  --name string 设置容器名称,否则会自动命名
  --network string 将容器加入指定网络
  -p, --publish list 设置容器映射端口
  		用法:
            -p ip:主机端口:容器端口
            -p 主机端口:容器端口 #(常用的方式)
            -p 容器端口
            容器端口
  -P,--publish-all 将容器设置的所有exposed端口进行随机映射
  --restart string 容器重启策略,默认为不重启
    on-failure[:max-retries]:在容器非正常退出时重启,可以设置重启次数。
    unless-stopped:总是重启,除非使用stop停止容器
    always:总是重启
  --rm 容器退出时则自动删除容器
  -t, --tty 分配一个伪终端
  -u, --user string 运行用户或者UID
  -v, --volume list 数据挂载
  -w, --workdir string 容器的工作目录
  --privileged 给容器特权

后台启动容器-d有个前提,就是容器中要有一个前台进程在运行,否则docker会将其关闭

eg:

#-p指定端口映射 docker run -d -p 宿主机IP:宿主主机端口:容器内端口 [镜像的名称] [cmd]
docker run -d -p 80:80 nginx
#端口范围映射
docker run -d -p 81-89:81-89 nginx
#-P随机端口映射
docker run -d -P nginx

eg:-it以交互式方式打开一个伪终端

[root@muyi muyi]# docker run -it centos /bin/bash
[root@407c90c3b71b /]# 
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

退出容器

exit      #停止容器并退出
Ctrl+p+q #容器不停止退出

删除容器

docker rm 容器id                 #删除容器,如果容器正再运行,需要加-f来强制删除
docker rm -f $(docker ps -aq)   #删除所有容器
docker ps -a -q|xargs docker rm #管道方式删除所有容器

启动和停止容器

docker start   容器id,容器id2               #启动一个或多个容器
docker restart   容器id ,容器id2           #重启一个或多个容器
docker stop   容器id ,容器id2 #停止一个或多个容器
docker kill   容器id,容器id2 #强制停止一个或多个容器

其它命令

rename

给容器重命名

Usage: docker rename CONTAINER NEW_NAME

logs

显示容器日志

Usage: docker logs [OPTIONS] CONTAINER
Options:
  --details 显示详细日志
  -f, --follow 跟随日志输出
  --tail string 显示行数
  -t, --timestamps 显示时间戳

inspect

获取容器或镜像的元数据

Usage: docker inspect [OPTIONS] NAME|ID [NAME|ID...]

进入容器

在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

  • docker attach :如果从这个容器退出,会导致容器的停止。
  • docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。

exec

向正在运行的容器下发命令

Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
Options:
    -d, --detach 在后台运行命令
    -e, --env list 设置环境变量
    -i, --interactive 以交互模式运行
    -t, --tty 分配一个伪终端
    -u, --user string 执行命令的用户
    -w, --workdir string 工作目录

eg:进入centos容器,其中的 /bin/bash是进入后的命令

docker exec -it 407c90c3b71b /bin/bash

cp

在容器和宿主机之间拷贝文件

Usage:
    docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-  
    docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
Options:
    -a, --archive 保留文件权限
eg:
docker cp 407c90c3b71b:/home/demo.java ./
docker cp ./demo2.java 407c90c3b71b:/home/demo.java   
 

查看内存占用:

docker stats

导出和导入容器

导出容器

如果要导出本地某个容器,可以使用 docker export 命令

docker export 407c90c3b71b  > centos.tar

导出容器 407c90c3b71b快照到本地文件 centos.tar,这样将导出容器快照到本地文件。

导入容器快照

可以使用 docker import 从容器快照文件中再导入为镜像

可视化

可跳过,一般不用。
安装一个可视化面板portainer

docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portaine

然后登录地址{ip}:8088,进入这个界面前会先让你创建用户,这里用户名就用它admin,密码要求不少于8位(这段话是为了提醒我我用的是哪个密码)

但是一般不用。。。

练习

安装nginx

首先dockerhub搜索nginx,然后里面有相应介绍,但是这里先按照自己方式下载镜像并启动容器:

docker run -d --name nginx01 -p 3344:80 nginx

启动成功后我们访问 localhost:3344就能看见nginx 的欢迎界面了

curl localhost:3344

安装tomcat

官方的方式:

docker run -it --rm tomcat:9.0

这里的 --rm是指容器停掉就删除,用完即删,一般是用于测试的。

这样相当于镜像下载了,然后跑了容器试一下

正式创建容器并启动:

docker run -d --name tomcat01 -p 8888:8080 tomcat:9.0

这是后台启动的,现在要进入改容器

docker exec -it tomcat01 /bin/bash

然后进入后当前环境就是tomcat根目录下,但是阿里镜像默认下载的是一个极简版tomcat,所以webapps里面没有项目,但是当前目录下的webapps.dist有那些东西,所以可以将这里面内容复制到webapps下面。

cp -r webapps.dist/* webapps

然后我们访问 主机ip:8888就能看见tomcat主页,那只小黄猫了。

安装elasticsearch

docker run -d --name elasticsearch01 -p 9200:9200 -p 9300:9300 -e “discovery.type=single-node” elasticsearch:7.6.2

参考:
https://www.docker.org.cn/book/docker/docker-push-image-13.html
https://www.runoob.com/docker/centos-docker-install.html
https://www.bilibili.com/video/BV1og4y1q7M4?p=39

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值