Docker的基础学习一

Docker 学习

Docker 的基本组成

镜像 images  
容器 container  基于镜像生成容器
仓库 repository 存储镜像的仓库

可以把容器看作一个简易版的Linux环境和运行在其中的应用程序

仓库分为公开库 和 私有仓库

CentOS7 安装docker

1、检查内核版本 官方建议 3.10 以上
uname -r 

2、卸载旧版本
sudo yum remove docker  docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

3、设置存储库-国内可以设置为阿里云
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 

4、更新yum缓存
yum makecache fast


5、安装docker

5.1、安装最新版
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

5.2、安装指定版本

5.2.1 列出存储库中的可用版本
yum list docker-ce --showduplicates | sort -r

5.2.2 安装指定版本的docker
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-buildx-plugin docker-compose-plugin

6、启动 Docker
sudo systemctl start docker

7、运行测试容器
sudo docker run hello-world

8、验证
docker ps -a
docker images -a
docker --help
docker version 
ps -ef |grep docker
docker info



停止 
sudo systemctl stop docker
卸载 
sudo yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

镜像加速器配置

进入目录
cd /etc/docker/

创建daemon.json文件并写入内容
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}
EOF

重新加载 systemd 管理器配置
sudo systemctl daemon-reload

重启服务
sudo systemctl restart docker

查看信息
docker info

测试 Hello World 镜像

docker run hello-world

当本地没有hello-world镜像时,会自动从远程仓库下载该镜像

当输出hello world提示后,容器就会自动终止

docker run xxx 首先在本机查找镜像,找到则直接生成容器实例运行。 找不到则从云端仓库查找,仓库找到则下载镜像到本地,生成容器实例运行,如果云端仓库查找不到则进行报错。

Docker 为什么会比虚拟机快

有比虚拟机更少的抽象层

利用的是宿主机的内核,而不需要加载操作系统OS内核

帮助启动类命令

启动 systemctl start docker
重启 systemctl restart docker
停止 systemctl stop docker
状态 systemctl status docker
开机启动 systemctl enable docker
查看概要信息 docker info
查看帮助文档 docker --help
查看具体命令帮助 docker 命令 --help

镜像命令

=====================================
本机镜像列表 
docker images  

REPOSITORY 仓库源
TAG        镜像标签版本号
IMAGE ID   镜像ID 
CREATED    镜像创建时间
SIZE       镜像大小

同一个仓库源可以有多个TAG版本,代表这个仓库源的不同个版本,我们使用REPOSITORY:TAG来定义不同的镜像。如果你不置顶一个镜像的版本标签,例如你只使用ubuntu,docker将默认使用ubuntu:latest镜像。

-a 列出本地所有的镜像(含历史映像层)
-q 只显示镜像ID 
=====================================
查找镜像
docker search 

NAME         镜像名称       
DESCRIPTION  镜像说明                                    STARS        点赞数量
OFFICIAL     是否官方的
AUTOMATED    是否自动构建的 

--limit 只列出N个镜像 默认25个
docker search --limit 10 php
=====================================
下载镜像

docker pull 镜像名字[:TAG]
docker pull 镜像名字 (默认latest镜像)
=====================================
查看镜像/容器/数据卷/构建缓存所占空间

docker system df

TYPE         类型(镜像/容器/数据卷/构建缓存)
TOTAL        总数
ACTIVE       活动数
SIZE         大小  
RECLAIMABLE  可回收(例如未使用的镜像或停止的容器占用的空间)
=====================================
删除一个或多个镜像
docker rmi <image_id_or_name1> 
docker rmi <image_id_or_name1:TAG> <image_id_or_name2> ...
删除全部镜像
docker rmi -f$(docker images -aq)
如果镜像正在被使用(例如由某个容器),可以使用 -f 选项强制删除:
docker rmi -f <image_id_or_name> 
清理未使用的镜像:
docker image prune
要删除所有未被使用的镜像(不仅仅是悬挂镜像),可以使用 -a 选项:
docker image prune -a

虚悬镜像 仓库名字、标签都是<none>的镜像 建议删掉 

容器命令

=====================================
新建+启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS 有些是一个减号 有些是两个减号
--name="容器名字" 为容器指定名称,不指定则系统随机分配
-d               后台运行容器并返回容器ID
-i               以交互模式运行容器,通常与-t同时使用
-t               为容器重新分配一个伪终端,通常与-i同时使用
-P               随机端口映射 (大写P)
-p               指定端口映射 (小写p)
    本地IP+端口:容器端口   -p 10.1.0.1:8080:80
    本地端口:容器端口      -p 8080:80

举例 启动一个ubuntu容器:
docker run -it ubuntu /bin/bash 
退出ubuntu终端则直接输入 exit
=====================================
列出正在运行的容器
docker ps

CONTAINER ID   容器ID
IMAGE          所属镜像
COMMAND        启动容器时运行的命令
CREATED        容器的创建时间
STATUS         容器的当前状态(Up 2 hours 表示已运行2小时)
PORTS          暴露端口
NAMES          容器名字 

-a或--all:显示所有容器(默认只显示正在运行的容器)。
-f或--filter filter:根据提供的条件过滤输出。
--format string:使用自定义模板格式化输出:
    'table':以表格格式打印输出并带有列标题(默认)。
    'table TEMPLATE':使用指定的 Go 模板以表格格式打印输出。
    'json':以 JSON 格式打印输出。
    'TEMPLATE':使用指定的 Go 模板打印输出。
    更多信息请参考 Docker 文档 中关于格式化输出的部分。
-n或--last int:显示最后创建的n个容器(包括所有状态,默认为 -1)。
-l或--latest:显示最新创建的容器(包括所有状态)。
--no-trunc:不截断输出。
-q或--quiet:只显示容器 ID。
-s或--size:显示总文件大小。
=====================================
退出容器

run进去容器 exit退出 容器停止
run进去容器 ctrl+p+q退出 容器不停止 
=====================================
启动已经停止的容器
docker start 容器ID/容器名称

=====================================
重启容器
docker restart 容器ID/容器名称

=====================================
停止容器
docker stop 容器ID/容器名称

=====================================
强制停止容器
docker kill 容器ID/容器名称

=====================================
删除已停止的容器
docker rm 容器ID/容器名称

强制删除容器
docker rm -f 容器ID/容器名称 

一次性删除全部容器实例 (包含启动中的)
docker rm -f$(docker ps -a -q)
docker ps -a -q | xargs docker rm -f
=====================================
前台交互式启动
docker run -it  redis:alpine3.20

后台守护式启动
docker run -d  redis:alpine3.20

查看容器启动日志
docker logs 容器ID/容器名称

查看容器内运行的进程
docker top  容器ID/容器名称

查看容器内部细节(容器作为最小化linux系统的一些系统配置信息)
docker inspect 容器ID/容器名称
=====================================
进入正在运行的容器并以命令行交互
docker exec -it 容器ID/容器名 bashShell
例如 
docker exec -it my_u01 /bin/bash 

重新进入
docker attach 容器ID/容器名

attach 直接进入容器启动命令的终端,不会启动新的进程,用exit退出,会导致容器停止
exec 是在容器中打开新的终端,并且可以启动新的进程,用exit退出,不会导致容器的停止

推荐使用docker exec 命令,因为退出容器终端,不会导致容器的停止
一般用-d后台启动的容器 用exec进入对应的容器实例干活

=====================================
从容器内拷贝文件到主机上
docker cp 容器ID/容器名:容器内路径 目标主机路径(本地路径)
docker cp my_u02:/1.txt /Users/iuu/22.txt

=====================================
导入和导出容器

export 导出容器的内容留作为一个tar归档文件
docker export 容器ID/容器名 > 文件名.tar
docker export my_u02 > /Users/iuu/my_u02.tar 


import 从tar包中的内容创建一个新的文件系统再导入为镜像

cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
cat /Users/iuu/my_u02.tar |docker import - iuu/my_u02:1.0

利用导入的镜像生成容器
docker run --name=my_u02  -it iuu/my_u02:1.0  /bin/bash

=====================================

北溟有鱼QAQ博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论