ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Docker基础用法

2021-07-27 21:32:44  阅读:174  来源: 互联网

标签:httpd 基础 用法 172.17 Docker ID root docker localhost


docker基础用法

什么是docker

docker中的容器:

  • lxc --> libcontainer --> runC

在这里插入图片描述

OCI&OCF

Open Container-initiative(开放容器组织)

  • 由Linux基金会主导于2015年6月创立

  • 旨在围绕容器格式和运行时制定一个开放的工业化标准

  • contains two specifications

    • the Runtime Specification(运行时规范)(runtime-spec)
    • the Image Specification(镜像规范)(image-spec)

OCF

Open Container Format (打开容器格式)

runC is a CLI tool for spawning and running containers according to the OCI specification (runC是一个CLI工具,用于根据OCI规范生成和运行容器)

  • Containers are started as a child process of runC and can be embedded
    into various other systems without having to run a daemon(容器是以runC为子进程的方式启动,并且可以被其他的系统引用,不需要启动为守护模式进程)

  • runC is built on libcontainer, the same container technology powering
    millions of Docker Engine installations
    (runC 可以构建我们的容器,并且可以被数以百万的存储引擎使用)

docker提供了一个专门容纳容器镜像的站点:https://hub.docker.com

docker架构

在这里插入图片描述

docker镜像与镜像仓库的关系

为什么镜像仓库名字是Registry而不是repository?在docker中仓库的名字是以应用的名称取名的。

在这里插入图片描述
镜像是静态的,而容器是动态的,容器有其生命周期,镜像与容器的关系类似于程序与进程的关系。镜像类似于文件系统中的程序文件,而容器则类似于将一个程序运行起来的状态,也即进程。所以容器是可以删除的,容器被删除后其镜像是不会被删除的。

安装及使用docker

docker安装

获取yum源

[root@localhost yum.repos.d]# cat docker-ce.repo 
[docker-ce]
name=docker-ce
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/8/x86_64/stable/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
enabled=1
//过滤出来docker
[root@localhost yum.repos.d]# yum list all |grep docker
docker-ce                                        19 kB/s |  14 kB     00:00    
containerd.io.x86_64                                   1.4.8-3.1.el8                                     docker-ce 
docker-ce.x86_64                                       3:20.10.7-3.el8                                   docker-ce 
docker-ce-cli.x86_64                                   1:20.10.7-3.el8                                   docker-ce 
docker-ce-rootless-extras.x86_64                       20.10.7-3.el8                                     docker-ce 
docker-scan-plugin.x86_64                              0.8.0-3.el8                                       docker-ce 
pcp-pmda-docker.x86_64                                 5.3.1-3.el8                                       appstream 
podman-docker.noarch                                   3.1.0-0.13.module_el8.5.0+733+9bb5dffa            appstream 

建立缓存

[root@localhost ~]# yum makecache
CentOS Stream 8 - AppStream                          7.8 kB/s | 4.4 kB     00:00    
CentOS Stream 8 - BaseOS                             5.8 kB/s | 3.9 kB     00:00    
CentOS Stream 8 - Extras                             3.3 kB/s | 3.0 kB     00:00    
docker-ce                                             12 kB/s | 3.5 kB     00:00    
元数据缓存已建立。

如果安装失败,尝试下面的用法。
(尝试在命令行中添加 '--allowerasing' 来替换冲突的软件包 或 '--skip-broken' 来跳过无法安装的软件包 或 '--nobest' 来不只使用软件包的最佳候选)
[root@localhost ~]# yum -y --allowerasing install docker-ce

启动docker

[root@localhost ~]# systemctl enable --now docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.


[root@localhost ~]# ls /etc/docker/
key.json
//这个启动服务之后,会自动创建。

docker加速

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

docker的加速有多种方式:

  • docker cn
  • 中国科技大学加速器
  • 阿里云加速器(需要通过阿里云开发者平台注册帐号,免费使用个人私有的加速器)
[root@localhost docker]# cat daemon.json 
{
  "registry-mirrors": ["https://4294sonj.mirror.aliyuncs.com"]
}

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

//添加完成加速器之后,重新读取一下,在重启docker
[root@localhost docker]# docker info
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
  scan: Docker Scan (Docker Inc., v0.8.0)

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 20.10.7
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 7eba5930496d9bbe375fdf71603e610ad737d2b2
 runc version: v1.0.0-0-g84113ee
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 4.18.0-257.el8.x86_64
 Operating System: CentOS Stream 8
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 1.748GiB
 Name: localhost.localdomain
 ID: DS7L:DIOS:HCTW:IKJP:2Q5Q:C2BH:AVR5:QASG:4QD2:B5ZU:E3OG:FTAZ
 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://4294sonj.mirror.aliyuncs.com/
 Live Restore Enabled: false

[root@localhost docker]# docker version
//查看版本信息
Client: Docker Engine - Community
 Version:           20.10.7
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        f0df350
 Built:             Wed Jun  2 11:56:24 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.7
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       b0f5bc3
  Built:            Wed Jun  2 11:54:48 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.8
  GitCommit:        7eba5930496d9bbe375fdf71603e610ad737d2b2
 runc:
  Version:          1.0.0
  GitCommit:        v1.0.0-0-g84113ee
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

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
[root@localhost ~]# docker search busybox
//在docker hub上面查找镜像
NAME                      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
busybox                   Busybox base image.                             2300      [OK]       
progrium/busybox                                                          70                   [OK]
radial/busyboxplus        Full-chain, Internet enabled, busybox made f…   41                   [OK]

[root@localhost ~]# docker pull busybox
//拉取镜像  如果后面没有跟版本号,就会默认拉取最新版本的。

Using default tag: latest
latest: Pulling from library/busybox
b71f96345d44: Pull complete 
Digest: sha256:0f354ec1728d9ff32edcd7d1b8bbdfc798277ad36120dc3dc683be44524c8b60
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest
[root@localhost ~]# docker images
//查看拉取的镜像放的位置
//列出镜像

REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
busybox      latest    69593048aa3a   7 weeks ago   1.24MB

[root@localhost ~]# docker create httpd
//创建一个容器

//创建一个容器的时候,它会自动的去docker hub拉取你创建的容器的镜像

Unable to find image 'httpd:latest' locally
latest: Pulling from library/httpd
33847f680f63: Pull complete 
d74938eee980: Pull complete 
963cfdce5a0c: Pull complete 
8d5a3cca778c: Pull complete 
e06a573b193b: Pull complete 
Digest: sha256:61e49dd08a51d6fc421ed257bd8eb461cf2d48269d9ab2b4ff5d4c69826c3c9c
Status: Downloaded newer image for httpd:latest
07a2d3de25710cc5103ed8c2cc308939cd03bcef5d97f70e131eb135ccddbf76

[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
httpd        latest    73b8cfec1155   5 days ago    138MB
busybox      latest    69593048aa3a   7 weeks ago   1.24MB

[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
07a2d3de2571   httpd     "httpd-foreground"   2 minutes ago   Created             condescending_shockley

[root@localhost ~]# docker start 07a2d3de2571
// 使用id来控制容器

07a2d3de2571

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED         STATUS              PORTS     NAMES
07a2d3de2571   httpd     "httpd-foreground"   5 minutes ago   Up About a minute   80/tcp    condescending_shockley

[root@localhost ~]# docker inspect 07a2d3de2571
//返回容器对象低级类的信息

[
    {
        "Id": "07a2d3de25710cc5103ed8c2cc308939cd03bcef5d97f70e131eb135ccddbf76",
        "Created": "2021-07-27T12:36:42.025892381Z",
        "Path": "httpd-foreground",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
......此处省略N行
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]


[root@localhost ~]# curl 172.17.0.2
<html><body><h1>It works!</h1></body></html>

[root@localhost ~]# docker stop 07a2d3de2571
//停止docker

07a2d3de2571

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

[root@localhost ~]# docker start 07a2d3de2571
07a2d3de2571
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS        PORTS     NAMES
07a2d3de2571   httpd     "httpd-foreground"   13 minutes ago   Up 1 second   80/tcp    condescending_shockley
[root@localhost ~]# docker restart 07a2d3de2571
//重合docker

07a2d3de2571
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS        PORTS     NAMES
07a2d3de2571   httpd     "httpd-foreground"   14 minutes ago   Up 1 second   80/tcp    condescending_shockley

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS              PORTS     NAMES
07a2d3de2571   httpd     "httpd-foreground"   15 minutes ago   Up About a minute   80/tcp    condescending_shockley

[root@localhost ~]# docker rm -f 07a2d3de2571
//删除镜像,不介意直接删除,首先要把docker停止,或者使用kill,在使用rm -f


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

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

[root@localhost ~]# docker run httpd
//直接拉取镜像,并启动
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[Tue Jul 27 12:56:32.824380 2021] [mpm_event:notice] [pid 1:tid 140350932755584] AH00489: Apache/2.4.48 (Unix) configured -- resuming normal operations
[Tue Jul 27 12:56:32.824574 2021] [core:notice] [pid 1:tid 140350932755584] AH00094: Command line: 'httpd -D FOREGROUND'



[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED         STATUS         PORTS     NAMES
9864d99dee59   httpd     "httpd-foreground"   6 seconds ago   Up 5 seconds   80/tcp    heuristic_booth

[root@localhost ~]# docker inspect 9864d99dee59
......
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
.....

[root@localhost ~]# curl 172.17.0.2
<html><body><h1>It works!</h1></body></html>


172.17.0.1 - - [27/Jul/2021:12:58:55 +0000] "GET / HTTP/1.1" 200 45

//ctrl +c  打断之后,httpd 就会停止

^C[Tue Jul 27 12:59:52.417572 2021] [mpm_event:notice] [pid 1:tid 140350932755584] AH00491: caught SIGTERM, shutting down


[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
9864d99dee59   httpd     "httpd-foreground"   3 minutes ago   Exited (0) 12 seconds ago             heuristic_booth

当使用docker run 时,服务是在前台,停止服务之后,再次重启,服务就会运行在后台

[root@localhost ~]# docker start 9864d99dee59
9864d99dee59
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND              CREATED         STATUS         PORTS     NAMES
9864d99dee59   httpd     "httpd-foreground"   5 minutes ago   Up 2 seconds   80/tcp    heuristic_booth

再次使用docker run命令,虽然服务相同,但是不会冲突

访问的ip会自动继承

[root@localhost ~]# docker run -d httpd
43434798b77b66a8c437e91f714b60660979cdaf88ec0ea20621539303078b55
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED         STATUS         PORTS     NAMES
43434798b77b   httpd     "httpd-foreground"   6 seconds ago   Up 5 seconds   80/tcp    awesome_aryabhata
9864d99dee59   httpd     "httpd-foreground"   8 minutes ago   Up 2 minutes   80/tcp    heuristic_booth
[root@localhost ~]# curl 172.17.0.3
<html><body><h1>It works!</h1></body></html>

[root@localhost ~]# curl 172.17.0.3
<html><body><h1>It works!</h1></body></html>
[root@localhost ~]# curl 172.17.0.3
<html><body><h1>It works!</h1></body></html>
[root@localhost ~]# curl 172.17.0.3
<html><body><h1>It works!</h1></body></html>
[root@localhost ~]# curl 172.17.0.3
<html><body><h1>It works!</h1></body></html>

获取容器的日志

[root@localhost ~]# docker logs 43434798b77b
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message
[Tue Jul 27 13:04:43.341505 2021] [mpm_event:notice] [pid 1:tid 140104083575936] AH00489: Apache/2.4.48 (Unix) configured -- resuming normal operations
[Tue Jul 27 13:04:43.341660 2021] [core:notice] [pid 1:tid 140104083575936] AH00094: Command line: 'httpd -D FOREGROUND'
172.17.0.1 - - [27/Jul/2021:13:04:56 +0000] "GET / HTTP/1.1" 200 45
172.17.0.1 - - [27/Jul/2021:13:06:59 +0000] "GET / HTTP/1.1" 200 45
172.17.0.1 - - [27/Jul/2021:13:07:01 +0000] "GET / HTTP/1.1" 200 45
172.17.0.1 - - [27/Jul/2021:13:07:01 +0000] "GET / HTTP/1.1" 200 45
172.17.0.1 - - [27/Jul/2021:13:07:02 +0000] "GET / HTTP/1.1" 200 45

//进入容器,如果退出,容器就退出
[root@localhost ~]# docker attach 43434798b77b
172.17.0.1 - - [27/Jul/2021:13:11:09 +0000] "GET / HTTP/1.1" 200 45
^C[Tue Jul 27 13:12:25.525288 2021] [mpm_event:notice] [pid 1:tid 140104083575936] AH00491: caught SIGTERM, shutting down

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS          PORTS     NAMES
9864d99dee59   httpd     "httpd-foreground"   15 minutes ago   Up 10 minutes   80/tcp    heuristic_booth

//进入容器,退出之后,容器依然在运行

[root@localhost ~]# docker exec -it 9864d99dee59 /bin/bash
root@9864d99dee59:/usr/local/apache2# pwd
/usr/local/apache2
root@9864d99dee59:/usr/local/apache2# 
root@9864d99dee59:/usr/local/apache2# cat /etc/os-release 
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
root@9864d99dee59:/usr/local/apache2# exit
exit
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS          PORTS     NAMES
9864d99dee59   httpd     "httpd-foreground"   18 minutes ago   Up 12 minutes   80/tcp    heuristic_booth

docker event state

在这里插入图片描述

docker的工作原理

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

标签:httpd,基础,用法,172.17,Docker,ID,root,docker,localhost
来源: https://blog.csdn.net/z07121/article/details/119150382

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有