docker基础用法

docker基础用法

说明:

Docker使用C/S体系的架构,Docker客户端与Docker守护进程通信,Docker守护进程负责构建,运行和分发Docker容器。Docker客户端和守护进程可以在同一个系统上运行,也可以将Docker客户端连接到远程Docker守护进程。Docker客户端和守护进程使用REST API通过unix套接字或网络接口进行通信。

下面是Docker核心组件及元素说明:

  • Docker Daemon : dockerd,用来监听Docker API的请求和管理Docker对象,比如镜像、容器、网络和Volume。

  • Docker Client : docker,docker client是我们和Docker进行交互的最主要的方式方法,比如我们可以通过docker run 命令来运行一个容器,然后我们的docker client会把命令发送给上面的Dockerd,主它来负责处理。

  • Docker Registry : 用来存储Docker镜像的仓库,Docker hub是官方提供的一个公共仓库,而且Docker默认也是从Docker Hub上查找镜像的。当然你也可以很方便的运行一个私有仓库,当我们使用docker pull或者docker run命令时,就会从我们配置的docker镜像仓库中去拉取镜像,使用docker push时,会将我们构建的镜像推送到对应的镜像仓库中。

  • Images : 镜像,镜像是一个只读模板 ,带有创建docker容器的说明。一般来说,镜像会基于另外的一些基础镜像构建并加上一些额外的自定义功能。比如你可以构建一个基于centos的镜像,然后在这个基础镜像上面安装一个Nginx应用,这样就可以构建成属于我们自己的镜像了。

  • Containers : 容器,容器是一个镜像的运行实例。可以使用Docker REST API或者CLI来操作容器。容器的实质是进程,但与直接在宿主机执行的进程不同,容器进行运行于属于自己独立的命名空间。因此容器可以拥有自己的root文件系统、自己的网络配置、自己的进程空间,甚至自己的用户id空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主机运行更多案例。

在这里插入图片描述
当你使用 docker 时,你正在创建和使用镜像、容器、网络、卷、插件和其他对象。

镜像:
镜像是一个只读模板,其中包含创建 docker 容器的指令。
通常,一个镜像基于另一个镜像,并带有一些额外的自定义。
您可以创建自己的镜像,也可以使用其他人创建并在仓库中发布的镜像。
容器:
容器是镜像的可运行实例。
您可以使用 docker API 或 CLI 创建、运行、停止、移动或删除容器。
您可以将容器连接到一个或多个网络,为其附加存储,甚至可以根据其当前状态创建新镜像。

docker安装
[root@localhost ~]# cat /etc/redhat-release 
CentOS Stream release 8

# 安装必要的一些系统工具
[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
# 1.yum-utils:提供了yum-config-manager工具
# 2.device mapper:是Linux内核中支持逻辑卷管理的通用设备映射机制,为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构
# 3.device mapper存储驱动程序需要device-mapper-persistent-data和lvm2


# 添加软件源信息
[root@localhost ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  # 指定的阿里云镜像源
Failed to set locale, defaulting to C.UTF-8
Adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

[root@localhost ~]# ls /etc/yum.repos.d/
CentOS-Stream-AppStream.repo  CentOS-Stream-Extras.repo            CentOS-Stream-PowerTools.repo  
CentOS-Stream-BaseOS.repo     CentOS-Stream-HighAvailability.repo  CentOS-Stream-RealTime.repo
CentOS-Stream-Debuginfo.repo  CentOS-Stream-Media.repo             docker-ce.repo

[root@localhost ~]# sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

# 更新并安装Docker-CE
[root@localhost ~]# yum makecache

[root@localhost ~]# yum -y install docker-ce

[root@localhost ~]# rpm -qa |grep docker
docker-ce-rootless-extras-20.10.11-3.el8.x86_64
docker-ce-cli-20.10.11-3.el8.x86_64
docker-ce-20.10.11-3.el8.x86_64
docker-scan-plugin-0.9.0-3.el8.x86_64

docker加速

docker-ce的配置文件是/etc/docker/daemon.json,此文件默认不存在,需要我们手动创建并进行配置,而docker的加速就是通过配置此文件来实现的。

docker的加速有多种方式:

  • docker.cn
  • 中国科技大学加速器
  • 阿里云加速器(需要通过阿里云开发者平台注册登录帐号,免费使用个人私有的加速器:控制台 --》左上角"三" --》容器服务 --》容器镜像服务 --》镜像工具 --》镜像加速)
[root@localhost ~]# systemctl start docker  # 启动docker

[root@localhost ~]# ls /etc/docker/ 
key.json
[root@localhost ~]# cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://wn5c7d7w.mirror.aliyuncs.com"]
}
EOF

[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker

[root@localhost ~]# docker version  # 查看版本信息
Client: Docker Engine - Community
 Version:           20.10.11
 API version:       1.41
 Go version:        go1.16.9
 Git commit:        dea9396
 Built:             Thu Nov 18 00:36:58 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.11
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.9
  Git commit:       847da18
  Built:            Thu Nov 18 00:35:20 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.12
  GitCommit:        7b11cfaabd73bb80907dd23182b9347b4245eb5d
 runc:
  Version:          1.0.2
  GitCommit:        v1.0.2-0-g52b36a2
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
  
  
  
[root@localhost ~]# docker info  # 查看docker信息
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.6.3-docker)
  scan: Docker Scan (Docker Inc., v0.9.0)

Server:
 Containers: 0   # 容器
  Running: 0     # 运行中
  Paused: 0      # 暂停的
  Stopped: 0     # 停止的
 Images: 0       # 镜像
 Server Version: 20.10.11
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
.......................
 Total Memory: 1.748GiB
 Name: localhost.localdomain
 ID: WLNV:4M33:6K72:5H7S:NI34:TR6G:X64W:WSVN:XDOY:TDP3:V5YD:6LLK
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:       
  https://wn5c7d7w.mirror.aliyuncs.com/    # 加速已配置成功
 Live Restore Enabled: false  
docker常用操作
命令功能
docker searchSearch the Docker Hub for images
docker pullPull an image or a repository from a registry
docker imagesList images
docker createCreate a new conntainer
docker startStart one or more stopped containers
docker runRun a command in a new container
docker attachAttach to a runninng container
docker psList containers
docker logsFetch the logs of a container
docker restartRestart a container
docker stopStop one or more running containers
docker killKill one or more running containers
docker rmRemove onne or more containers
docker execRun a command in a running container
docker infoDisplay system-wide information
docker inspectReturn low-level information on Docker objects

docker event state

在这里插入图片描述

docker简单操作

搜索镜像

[root@localhost ~]# docker search nginx
NAME                        DESCRIPTION                                   STARS  OFFICIAL(官方)   AUTOMATED
nginx                       Official build of Nginx.                       15899     [OK]       
jwilder/nginx-proxy         Automated Nginx reverse proxy for docker con…  2098                    [OK]
richarvey/nginx-php-fpm     Container running Nginx + PHP-FPM capable of…  819                     [OK]
......

拉取镜像

# 语法:docker pull [OPTIONS](选项) NAME[:TAG|@DIGEST]
选项:
-a 下载存储库中所有标记的镜像
...
-q 抑制详细输出

[root@localhost ~]# docker pull nginx:latest  # 拉取一个nginx镜像到本地(标签为最新的)
latest: Pulling from library/nginx
eff15d958d66: Pull complete 
1e5351450a59: Pull complete 
2df63e6ce2be: Pull complete 
9171c7ae368c: Pull complete 
020f975acd28: Pull complete 
266f639b35ad: Pull complete 
Digest: sha256:097c3a0913d7e3a5b01b6c685a60c03632fc7a2b50bc8e35bcaa3691d788226e
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

查看镜像

# 语法:docker images [OPTIONS] [REPOSITORY[:TAG]]
选项:
-a 显示所有
-q 只显示镜像id

[root@localhost ~]# docker images  # 查看镜像
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    ea335eea17ab   13 days ago   141MB

创建容器

# 语法:docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
选项: 
docker create --help 查看

[root@localhost ~]# docker create nginx  # 创建容器指定镜像是nginx
044e76fbebfdddcf5c9732384da632e3195714ae3c6b9c2866c76413ca2628e2

查看容器

# 语法:docker ps [OPTIONS]
选项:
-a 查看所有
-n 显示最近创建的容器
-l 显示最新创建的容器
-q 只显示容器id
-s 显示总大小

[root@localhost ~]# docker ps(查看正在运行的容器)
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

[root@localhost ~]# docker ps -as(查看所有显示总大小)
CONTAINER ID   IMAGE     COMMAND              CREATED       STATUS    PORTS          NAMES            SIZE
044e76fbebfd(nginx容器ID)   nginx  "/docker-entrypoint.…" 4 minutes ago  Created            vigilant_mendeleev           0B (virtual 141MB)

启动容器

# 语法:docker start [OPTIONS] CONTAINER [CONTAINER...]

# 启动nginx容器
[root@localhost ~]# docker start 044e76fbebfd (docke ps -as命令查看到的nginx容器ID)
044e76fbebfd

# 查看正在运行的容器
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS         PORTS     NAMES
044e76fbebfd   nginx     "/docker-entrypoint.…"   24 minutes ago   Up 3 minutes(启动了三分钟)   80/tcp    vigilant_mendeleev


# 重启容器,查看
[root@localhost ~]# docker restart 044e76fbebfd
044e76fbebfd

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
044e76fbebfd   nginx     "/docker-entrypoint.…"   26 minutes ago   Up 22 seconds(启动了22秒)   80/tcp    vigilant_mendeleev


# 停止容器,查看
[root@localhost ~]# docker stop 044e76fbebfd
044e76fbebfd

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                     PORTS     NAMES
044e76fbebfd   nginx     "/docker-entrypoint.…"   27 minutes ago   Exited (0) 2 seconds ago(2秒前退出)             vigilant_mendeleev

杀死容器

# 语法:docker kill [OPTIONS] CONTAINER [CONTAINER...]

# 先启动再杀死
[root@localhost ~]# docker start 044e76fbebfd # 启动
044e76fbebfd

[root@localhost ~]# docker ps # 查看
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS              PORTS     NAMES
044e76fbebfd   nginx     "/docker-entrypoint.…"   33 minutes ago   Up About a minute(启动了大约一分钟)   80/tcp    vigilant_mendeleev

[root@localhost ~]# docker kill 044e76fbebfd # 杀死
044e76fbebfd

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                       PORTS     NAMES
044e76fbebfd   nginx     "/docker-entrypoint.…"   34 minutes ago   Exited (137) 3 seconds ago(3秒前退出)             vigilant_mendeleev

在容器中运行命令

#语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
选项:
-i 交互模式
-t 指定登录终端
-d 后台运行
....

# 运行一个容器
[root@localhost ~]# docker run -it nginx /bin/sh
# ls   # 进入到容器使用ls查看了一下
bin   dev                  docker-entrypoint.sh  home  lib64  mnt  proc  run   srv  tmp  var
boot  docker-entrypoint.d  etc                   lib   media  opt  root  sbin  sys  usr
# exit

*[root@localhost ~]#docker run -d(后台运行) httpd(如果本地没有镜像,会拉取镜像到本地并启动)

查看容器信息

# 语法:docker inspect [OPTIONS] NAME|ID [NAME|ID...]
选项:
-f,——format string使用给定的Go模板格式化输出
-s,——size如果是容器类型,则显示文件的总大小
    ——type string指定类型返回JSON

[root@localhost ~]# docker ps(查看正在运行的nginx容器)
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS         PORTS     NAMES
044e76fbebfd(容器ID)   nginx     "/docker-entrypoint.…"   47 minutes ago   Up 7 minutes   80/tcp    vigilant_mendeleev

[root@localhost ~]# docker inspect 044e76fbebfd
                  ......................
                    "NetworkID": "ab1503434672a8143abcd971d497839c655f82e1b2b339133a440a08c56c5c16",
                    "EndpointID": "433384e10f1574711de645199fb9100956a373e9731c808d23758c668b2b1ab3",
                    "Gateway": "172.17.0.1",    # 容器网关
                    "IPAddress": "172.17.0.2",  # 容器IP
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]


访问nginx容器IP
[root@localhost ~]# curl 172.17.0.2
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
.......

获取日志

# 语法:docker logs [OPTIONS] CONTAINER

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED             STATUS          PORTS     NAMES
044e76fbebfd   nginx     "/docker-entrypoint.…"   About an hour ago   Up 22 minutes   80/tcp    vigilant_mendeleev

[root@localhost ~]# docker logs 044e76fbebfd
......
2021/12/01 09:13:45 [notice] 1#1: start worker process 26
172.17.0.1 - - [01/Dec/2021:09:32:42 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.61.1" "-"

删除容器(不能删除正在运行的容器)

[root@localhost ~]# docker ps # 查看正在运行的容器
CONTAINER ID   IMAGE     COMMAND                  CREATED             STATUS          PORTS     NAMES
044e76fbebfd   nginx     "/docker-entrypoint.…"   About an hour ago   Up 25 minutes   80/tcp    vigilant_mendeleev

[root@localhost ~]# docker stop 044e76fbebfd # 停止
044e76fbebfd

[root@localhost ~]# docker ps # 查看正在运行的容器
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

[root@localhost ~]# docker ps -a # 查看所有容器
CONTAINER ID   IMAGE     COMMAND                  CREATED             STATUS                      PORTS     NAMES
27f19fb1d31a   nginx     "/docker-entrypoint.…"   19 minutes ago      Exited (0) 19 minutes ago             wonderful_goldberg
ca09ab0138ea   nginx     "/docker-entrypoint.…"   23 minutes ago      Exited (0) 21 minutes ago             flamboyant_goldwasser
044e76fbebfd   nginx     "/docker-entrypoint.…"   About an hour ago   Exited (0) 7 seconds ago              vigilant_mendeleev

# 单个删除
docker rm 容器ID2 容器ID2 ...

# 批量删除
[root@localhost ~]# docker ps -qa # 获取容器ID
27f19fb1d31a
ca09ab0138ea
044e76fbebfd

[root@localhost ~]# docker rm $(docker ps -qa)
27f19fb1d31a
wonderful_goldberg
ca09ab0138ea

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

在运行容器中运行命令

# 语法:docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
选项:
-d 后台运行
-i 交互模式
-t 指定登录
.....

[root@localhost ~]# docker create nginx # 创建一个容器
23d73f109134c64ee6e0c3947bd9a2fa8f463df0d63e81ec3aa7c9e9c76230e2

[root@localhost ~]# docker ps -a # 查看
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS    PORTS     NAMES
23d73f109134   nginx     "/docker-entrypoint.…"   3 seconds ago   Created             cool_tereshkova

[root@localhost ~]# docker start 23d73f109134 # 启动容器
23d73f109134

[root@localhost ~]# docker ps # 查看
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS         PORTS     NAMES
23d73f109134   nginx     "/docker-entrypoint.…"   42 seconds ago   Up 3 seconds   80/tcp    cool_tereshkova

[root@localhost ~]# docker exec -it 23d73f109134 /bin/bash # 进入容器,执行命令
root@23d73f109134:/# cat /etc/os-release  # 查看容器的系统版本
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
root@23d73f109134:/# exit
exit
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值