Docker基础操作

1. Docker概念

  镜像(image): Docker镜像就像一个模板,可通过这个模板来创建容器服务,通过镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中)。

  容器(container):Docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建的。启动、停止、删除,基本命令。目前就可以把这个容器理解为就是一个简易的linux系统。

  仓库(repository):仓库就是存放镜像的地方!仓库分为共有仓库、私有仓库。

 

2. Docker安装

2.1 准备工作

  操作系统:CentOS 7

  系统内核是3.10以上的。 查看命令:uname -r

[root@localhost ~]# uname -r
3.10.0-862.el7.x86_64

  查看系统版本。查看命令:cat /etc/os-release 

[root@localhost ~]# cat /etc/os-release 
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

 

2.2 安装步骤

  帮助文档:https://docs.docker.com/engine/install/centos/

# 1. 卸载旧的版本
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
# 2. 需要的安装包
yum install -y yum-utils

# 3. 设置镜像仓库
# 国外的地址
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

# 提前更新yum软件包索引
yum makecache fast

# 4. 安装docker  docker-ce社区版   docker-ee企业版
sudo yum install docker-ce docker-ce-cli containerd.io
    默认安装最新的版本
查看其它版本的docker
yum list docker-ce --showduplicates | sort -r
安装指定版本的docker
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

# 5. 启动docker
systemctl start docker

# docker设置开机启动
[root@localhost ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

# 6. 查看docker版本号,验证是否安装成功
docker version

# 7. 测试docker,运行hello world
docker run hello-world

# 8. 查看docker是否下载,查看docker列表
docker images

 

2.3 卸载Docker

# 1. 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
#
2. 删除资源 rm -rf /var/lib/docker rm -rf /var/lib/containerd # /var/lib/docker是Docker的默认工作路径

 

2.4 底层原理

​  Docker是怎么工作的?Docker是一个Client-Server结构的系统,Docker是守护进程运行在主机上,通过Socket从客户端访问!Docker接收到Docker-Client指令,就会执行这个命令。

​  Docker为什么比虚拟机快?1.Docker有着比虚拟机更少的抽象层。2.Docker利用的是宿主机的内核,虚拟机需要是Guest OS(操作系统内核)。

  所以说,新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导。虚拟机加载Guest OS,分钟级别的,而Docker是利用宿主机的操作系统,省略了这个复杂的过程,秒级。

 

3 Docker命令

  官方Docker命令列表:https://docs.docker.com/engine/reference/run/

 

3.1 帮助命令

  docker version           # 显示docker的版本信息

  docker info                 # 显示docker的系统信息,包括镜像和容器

  docker 命令 --help     # 帮助命令,展示指定命令的相关参数

 

3.2 镜像命令

3.2.1 docker images 查看所有本地主机上的镜像

[root@localhost ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    d1165f221234   5 weeks ago   13.3kB

  解析
  REPOSITORY    镜像的仓库源

  TAG                    镜像的标签

  IMAGE ID                镜像的ID

  CREATED               镜像的创建时间

  SIZE                        镜像的大小

  命令可选项

  -a, --all # 列出所有镜像

  -f, --filter # 根据提供的条件过滤

  -q, --quiet # 只显示镜像的ID

 

3.2.2 docker search  搜索镜像(在仓库搜索)

[root@localhost ~]# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   10748     [OK]       
mariadb                           MariaDB Server is a high performing open sou…   4047      [OK]  

  可选项,通过搜索条件过滤

  -f, --filter

  举例:docker search mysql --filter=STARS=5000

 

3.2.3  docker pull 下载镜像

# 下载镜像 docker pull 镜像名[:tag]
[root@localhost ~]# docker pull mysql
Using default tag: latest   # 如果不写tag,默认就是latest最新版本
latest: Pulling from library/mysql
f7ec5a41d630: Pull complete   # 分层下载,docker image的核心,联合文件系统
9444bb562699: Pull complete   # 每一层都可能被其他镜像复用,避免重复下载
6a4207b96940: Pull complete 
181cefd361ce: Pull complete 
8a2090759d8a: Pull complete 
15f235e0d7ee: Pull complete 
d870539cd9db: Pull complete 
5726073179b6: Pull complete 
eadfac8b2520: Pull complete 
f5936a8c3f2b: Pull complete 
cca8ee89e625: Pull complete 
6c79df02586a: Pull complete 
Digest: sha256:6e0014cdd88092545557dee5e9eb7e1a3c84c9a14ad2418d5f2231e930967a38 #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest  #真实地址

  下面这两个docker是等价的

docker pull mysql
docker pull docker.io/library/mysql:latest
docker pull mysql:5.7   # 指定下载mysql版本

 

3.2.4 docker rmi 删除镜像

  docker rmi -f 镜像ID                              # 根据指定的镜像

  docker rmi -f 镜像id 镜像id 镜像id        # 删除多个镜像

  docker rmi -f ${docker images -aq}      # 删除所有镜像

 

3.3 容器命令

  说明:我们有了镜像才可以创建容器。

  下载一个centos镜像来学习。

docker pull centos

 

3.3.1 docker run image  新建容器并启动

  docker run [可选参数] image

  参数说明:

  --name="Name"   容器的名字,如:tomcat1 用来区分容器

  -d      后台方式运行

  -it     使用交互方式运行,进入容器查看内容

  -p      指定容器端口  -p 8080:8080

       -p    ip:主机端口:容器端口

                 -p    主机端口:容器端口(常用)

                 -p    容器端口

  -P      随机指定端口

#测试,启动并进入容器
[root@localhost ~]# docker run -it centos /bin/bash    (/bin/bash是CentOS的交互控制台,localhost是宿主机主机名)
[root@aacf88006d8f /]# ls     # 进入后主机名变成了容器ID=aacf88006d8f

# 从容器中退回主机
exit

 

3.3.2 docker ps 列出所有的运行容器

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
aacf88006d8f   centos    "/bin/bash"   2 minutes ago   Up 2 minutes             intelligent_pike

  参数说明:

         # 列出当前正在运行的容器

  -a         # 列出当前正在运行的容器+带出历史运行过的容器

       -n=?     # 显示当前创建的容器

       -q         # 只显示容器的编号

 

3.3.3 exit 退出容器

       exit                # 直接容器停止并退出

  ctrl + P + Q   # 容器不停止退出

 

3.3.4 docker rm 删除容器

  docker rm 容器Id                      # 删除指定容器,不能删除正在运行的容器,强制删除:rm -f

  docker rm -f ${docker images -aq}     # 删除所有容器

  docker ps -a -q|xargs docker rm       # 删除所有容器

 

3.3.5 启动和停止容器

  docker start 容器id       # 启动容器

  docker restart 容器id    # 重启容器

  docker stop 容器id       # 停止当前正在运行的容器

  docker kill 容器id         # 强制停止当前容器

 

3.4 操作命令

3.4.1 后台启动容器

  docker run -d 镜像名

  例如:docker run -d centos

  # 问题docker ps,发现centos停止了

  # 常见的坑,docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止

  # nginx容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了

 

3.4.2 查看日志

  docker logs

  docker logs -tf 容器ID           # 查看指定容器的日志

  docker logs -tf --tail 10 容器ID # 查看指定容器的日志,只要前10行

# 编写一个shell,创造日志
docker run -d centos /bin/sh -c "while true;do echo ahahahah;sleep 1;done"

 

3.4.3 查看容器中的进程信息

  docker top 容器ID    # 查看指定容器的进行信息

[root@localhost ~]# docker top aacf88006d8f
UID      PID      PPID      C     STIME       TTY      TIME         CMD
root     46390    46368     0     16:34       ?      00:00:00    /bin/bash

 

3.4.4 查看镜像的元数据

  docker inspect 容器ID

 

3.4.5 进入当前正在运行的容器

  通常容器都是使用后台方式运行的,需要进入容器,修改一些配置

  docker exec -it 容器ID

  docker exec -it 容器ID /bin/bash

  方式2:

  docker attach 容器ID

  区别:

  docker exec       # 进入容器后开启一个新的终端,可以在里面操作(常用)

  docker attach     # 进入容器正在执行的终端,不会启动新的进程

 

3.4.6 从容器拷贝文件到主机

  docker cp  # 容器ID:容器内路径 主机路名

  测试:

docker cp aacf88006d8f:/home/test.java /home

 

 

查看docker 容量

1. df -h  查看系统容量情况

2. 进入 /var/lib/docker   用 du -sh * 查看当前路径下的文件和文件夹容量情况

3. 上一步会发现  containers 和 overlay2 都很大,但是其实 containers 是会每天变大的

4. 进入 containers,du -sh * 发现哪个容器特别大

5. 进入对应的容器ID,用 cat /dev/null > *-json.log 清理容器

 

posted @ 2022-08-24 13:56  闲人鹤  阅读(109)  评论(0编辑  收藏  举报