Docker 基础

发布时间:2024年01月08日

1.Docker概述

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

  • 传统:开发jar,运维来做。
  • 现在:开发打包部署,一套流程。

2.Docker安装

环境准备:

  1. 需要会一点Linux的基础
  2. CentOS 7
  3. 使用Xshell连接远程服务器

Linux sudo命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。

1.卸载旧的版本

sudo 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.设置镜像的仓库(阿里云)

sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新软件包索引

yum makecache fast

4.安装docker

sudo yum install docker-ce docker-ce-cli containerd.io

5.启动docker

sudo systemctl start docker

6.查看是否安装成功

docker version

在这里插入图片描述
7.验证是否正确安装

docker run hello-world

在这里插入图片描述

8.查看一下下载的hello-world镜像

docker images

在这里插入图片描述

9.卸载docker

# 1.卸载依赖
yum remove docker-ce docker-ce-cli containerd.io

# 2.删除资源
rm -rf /var/lib/docker

10.配置阿里云镜像加速器

登录阿里云,找到容器镜像服务,点击镜像加速器,然后依次执行命令即可。

在这里插入图片描述

# 应该只能使用自己的
sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://i2902kmw.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

3.Docker与虚拟机VM

docker Run的流程
在这里插入图片描述
docker底层原理
Docker是一个 Client-Server 结构的系统,Docker的守护进程运行在主机上,通过Socket从客户端访问。

docker与虚拟机区别

Docker 主要解决环境配置问题,它是一种虚拟化技术,对进程进行隔离,被隔离的进程独立于宿主操作系统和其它隔离的进程。使用 Docker 可以不修改应用程序代码,不需要开发人员学习特定环境下的技术,就能够将现有的应用程序部署在其它机器上。
在这里插入图片描述
虚拟机也是一种虚拟化技术,它与 Docker 最大的区别在于它是通过模拟硬件,并在硬件上安装操作系统来实现。
在这里插入图片描述

4.Docker命令

1.帮助命令

# 查看基本信息
docker version

# 系统信息,包括镜像和容器数
docker info

# 万能命令
docker 命令 --help

2.镜像命令

1.images
# 列出本地镜像
docker images 

# 具体使用方法可以输入命令 docker images --help

Options:
  -a, --all             Show all images (default hides intermediate images)
      --digests         Show digests
  -f, --filter filter   Filter output based on conditions provided
      --format string   Format output using a custom template:
                        'table':            Print output in table format with column headers (default)
                        'table TEMPLATE':   Print output in table format using the given Go template
                        'json':             Print in JSON format
                        'TEMPLATE':         Print output using the given Go template.
                        Refer to https://docs.docker.com/go/formatting/ for more information about formatting output with templates
      --no-trunc        Don't truncate output
  -q, --quiet           Only show image IDs
2.search
# 从Docker Hub查找镜像
docker search [OPTIONS] TERM

OPTIONS说明:

  • -f <过滤条件>:列出收藏数不小于指定值的镜像。

在这里插入图片描述
参数说明:

  • NAME: 镜像仓库源的名称
  • DESCRIPTION: 镜像的描述
  • OFFICIAL: 是否 docker 官方发布
  • stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
  • AUTOMATED: 自动构建。
3.pull
# 从镜像仓库中拉取或者更新指定镜像
docker pull [OPTIONS] NAME[:TAG|@DIGEST]

# 不写tag,默认就是最新版本
# 拉取最新的java镜像
docker pull java

# 从Docker Hub下载REPOSITORY为java的所有镜像
docker pull -a java

# 拉取指定版本
docker pull mysql:5.7
4.rmi
# 删除本地一个或多个镜像
docker rmi [OPTIONS] IMAGE [IMAGE...]

# 举例
# 删除单个
docker rmi -f 容器id

# 删除多个
docker rmi -f 容器id 容器id 容器id...

# 删除全部容器
docker rmi -f $(docker images -aq)

OPTION说明:

  • -f :强制删除

在这里插入图片描述

3.容器命令

说明:我们有了镜像才可以创建容器,下载一个centos镜像。

docker pull centos
1.run

新建容器并启动

docker run [可选参数] image

# 参数说明
--name="Name" # 容器名字,区分容器
-d            # 后台方式运行
-it           # 使用交互方式允许,进入容器查看内容
-p            # 指定容器的端口
	-p ip:主机端口:容器端口
	-p 主机端口:容器端口(常用)
	-p 容器端口
	容器端口
-P            # 随机指定端口

# 测试,启动并进入容器
[root@iZ0jl2pjllvr5lfp1bkua1Z ~]# docker run -it centos /bin/bash
[root@f1a9e93b0ff6 /]# 

# 查看内部
[root@f1a9e93b0ff6 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

# 从容器退回主机
exit


exit            # 直接退出容器并关闭
Ctrl + P + Q    # 容器不关闭退出
2.ps
# 列出容器
docker ps [OPTIONS]

# 列出当前加历史允许过的容器
docker ps -a

OPTIONS说明:

  • -a :显示所有的容器,包括未运行的。
  • -f :根据条件过滤显示的内容。
  • -n :列出最近创建的n个容器。
  • -l :显示最近创建的容器。

在这里插入图片描述
参数说明:

  • CONTAINER ID: 容器 ID
  • IMAGE: 使用的镜像
  • COMMAND: 启动容器时运行的命令
  • CREATED: 容器的创建时间
  • STATUS: 容器状态
  • PORTS: 容器的端口信息和使用的连接类型(tcp\udp)
  • NAMES: 自动分配的容器名称
3.rm
# 删除一个或多个容器
docker rm [OPTIONS] CONTAINER [CONTAINER...]

# 删除指定容器,不能删除正确允许的容器,如果强制删除rm -f
docker rm 容器id

# 删除所有的容器
docker rm -f $(docker ps -aq)
4.start
# 启动一个或多个已经被停止的容器
docker start [OPTIONS] CONTAINER [CONTAINER...]

# 启动
docker start 容器id
5.stop
# 停止一个运行中的容器
docker stop [OPTIONS] CONTAINER [CONTAINER...]

# 停止
docker stop 容器id
6.restart
# 重启容器
docker restart [OPTIONS] CONTAINER [CONTAINER...]

# 重启
docker restart 容器id
7.kill
# 杀掉一个运行中的容器
docker kill [OPTIONS] CONTAINER [CONTAINER...]

# 杀掉
docker kill 容器id

在这里插入图片描述

4.常用其他命令

1.后台启动容器
# 命令 docker run -d 镜像名
docker run -d centos

# 问题docker ps 发现 centos停止

# 常见的坑, docker 容器使用后台运行, 就必须要有一个前台进程,docker发现没有应用,就会自动停止
# nginx, 容器启动后,发现自己没有提供服务,就会立即停止,就是没有程序

在这里插入图片描述

2.查看日志(logs)
# 获取容器的日志
docker logs [OPTIONS] CONTAINER

# 显示容器10条日志
docker logs -tf --tail 10 f272a950b815

OPTIONS说明:

  • -f : 跟踪日志输出
  • –since :显示某个开始时间的所有日志
  • -t : 显示时间戳
  • –tail :仅列出最新N条容器日志
3.查看进程信息(top)
# 查看容器中运行的进程信息,支持 ps 命令参数
docker top [OPTIONS] CONTAINER [ps OPTIONS]

# 举例
docker top f272a950b815

在这里插入图片描述

4.查看镜像源数据(inspect)
# 获取容器/镜像的元数据
docker inspect [OPTIONS] NAME|ID [NAME|ID...]

# 举例
docker inspect f272a950b815

在这里插入图片描述

5.进入当前运行容器(exec)
# 在运行的容器中执行命令
# 进入容器后开启一个新的终端,可以在里面操作
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

# 举例
docker exec -it f272a950b815 /bin/bash

6.连接运行中容器(attach)
# 连接到正在运行中的容器
# 进入容器正在执行的终端,不会启动新的进程
docker attach [OPTIONS] CONTAINER

# 举例
docker attach f272a950b815
7.数据拷贝(cp)
# 用于容器与主机之间的数据拷贝
docker cp 容器id:容器内路径    目的地主机路径

docker cp 3ff49a3c1032:/home/test.java /home

在这里插入图片描述

5.小结

学习docker过程中,搞不清镜像与容器的关系,把它们搞混淆分不清。
简单点理解:docker容器是由docker镜像创建的运行实例。

文章来源:https://blog.csdn.net/qq_63140630/article/details/135419267
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。