Docker介绍

Docker概述

什么是容器

容器技术已经成为应用程序封装和交付的核心技术
容器的技术核心有以下几个内核技术组成:
1.Cgroup(Control Groups)-资源管理
2.NameSpace-进程隔离
3.SELinux安全
由于是在物理机上实施隔离,启动一个容器,可以像启动一个进程一样快速
(进程隔离,也叫命名空间)1.主机名命名空间
2.网络命名空间,更改ip,不影响宿主的实时登录
3.文件系统命名空间
4.进程命名空间,只能看见自己的进程,别人的进程隔离开,看不到
5.信号向量进程空间(kill -l ,可以查看进程信号),信号隔离
6.用户隔离,可以让不同的命名空间里有不同的用户

什么是Docker

Docker是完整的一套容器管理系统(本来开源免费,现在有社区版和企业版,且社区吧有问题多多)
Docker提供了一组命令,让用户更加方便直接地使用容器技术,而不需要过多关心底层内核技术
作用是很方便的使用命令创建容器,而不需要过多的了解内核技术

Docker特性

优点:可以没有操作系统,容器更加简洁高效,使用的共享公共库和程序(容器的系统都是底层一个)
缺点:隔离性没有虚拟化强,共用Linux内核,安全性有先天缺陷,SELinux难以驾驭,监控容器和容器拍错是挑战
安装至少需要64位操作系统(推荐RHEL7以上),关闭防火墙(不是必须,但是安装Docker会生成防火墙,监管,不了解防火墙的,防火墙必须关掉)
容器与虚拟化对比图

部署Docker

安装软件

配置yum源,Docker软件包位于光盘RHEL7-extras.iso中
利用ftp共享挂载
在虚拟机中配置yum源,指向ftp共享的extras目录

[root@docker1 ]# vim /etc/yum.repos.d/rhel.repo
...
[local_extras]
name=CentOS-$releasever - Extras
baseurl="ftp://192.168.1.254/extras"
enabled=1
gpgcheck=0

更改静态ip为192.168.1.31/32
安装Docker软件

yum -y install docker
systemctl restart/enable docker

关闭防火墙

Docker镜像

什么是镜像

在Docker中容器是基于镜像启动的,镜像是启动容器的核心,采用分层设计,使用快照的COW技术,确保底层数据不丢失(镜像是个整体,而且是只读的,操作都是在容器中进行)
镜像图例

Docker hub镜像仓库

HTTps://hub.docker.com (Docker官方公共镜像的仓库Registry)
命令行下载:docker search +软件包名(软件包镜像文件,例nginx,busybox,centos)
搜索出的包名(OFFICIAL列,是否由官方提供),复制NAME名,全复制
Docker pull +NAME名
docker images 查看已有的仓库镜像文件

[root@docker1 ~]# docker search busybox
INDEX       NAME                                DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/busybox                   Busybox base image.                             1696      [OK]       
docker.io   docker.io/progrium/busybox                                                          71                   [OK]
docker.io   docker.io/radial/busyboxplus        Full-chain, Internet enabled, busybox made...   25                   [OK]
docker.io   docker.io/arm32v7/busybox           Busybox base image.                             7                    
docker.io   docker.io/armhf/busybox             Busybox base image.                             5                    
docker.io   docker.io/yauritux/busybox-curl     Busybox with CURL                               5                    
docker.io   docker.io/arm64v8/busybox           Busybox base image.                             3                    
docker.io   docker.io/aarch64/busybox           Busybox base image.                             2                    
docker.io   docker.io/arm32v6/busybox           Busybox base image.                             2                    
docker.io   docker.io/armel/busybox             Busybox base image.                             2                    
docker.io   docker.io/i386/busybox              Busybox base image.                             2                    
docker.io   docker.io/joeshaw/busybox-nonroot   Busybox container with non-root user nobody     2                    
docker.io   docker.io/odise/busybox-curl                                                        2                    [OK]
docker.io   docker.io/p7ppc64/busybox           Busybox base image for ppc64.                   2                    
docker.io   docker.io/prom/busybox              Prometheus Busybox Docker base images           2                    [OK]
docker.io   docker.io/s390x/busybox             Busybox base image.                             2                    
docker.io   docker.io/sequenceiq/busybox                                                        2                    [OK]
docker.io   docker.io/ppc64le/busybox           Busybox base image.                             1                    
docker.io   docker.io/spotify/busybox           Spotify fork of https://hub.docker.com/_/b...   1                    
docker.io   docker.io/amd64/busybox             Busybox base image.                             0                    
docker.io   docker.io/arm32v5/busybox           Busybox base image.                             0                    
docker.io   docker.io/concourse/busyboxplus                                                     0                    
docker.io   docker.io/ggtools/busybox-ubuntu    Busybox ubuntu version with extra goodies       0                    [OK]
docker.io   docker.io/sou856099/busybox                                                         0                    
docker.io   docker.io/trollin/busybox                                                           0                    
[root@docker1 ~]# docker pull docker.io/busybox
Using default tag: latest
Trying to pull repository docker.io/library/busybox ... 
latest: Pulling from docker.io/library/busybox
7c9d20b9b6cd: Pull complete 
Digest: sha256:fe301db49df08c384001ed752dff6d52b4305a73a7f608f21528048e8a08b51e
[root@docker1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/busybox   latest              19485c79a9bb        5 weeks ago         1.22 MB

镜像操作

下载镜像(从镜像仓库中下载镜像) Docker help pull(查看下载命令),man docker-pull
上传镜像(上传镜像到仓库)Docker help push (查看上传命令)
导出镜像 (将本地镜像导出为tar文件) docker save +镜像名:标签 -o 镜像名.tar(相当于备份)
导入镜像(通过tar包文件导入镜像): scp 镜像名.tar root@192.168.1.32;/root/(拷贝恢复镜像)
docker load -i + 镜像ming.tar
docker images
存在很多镜像文件时,备份必须是镜像名:标签+.tar
启动镜像
启动Centos镜像生成一个容器Docker images ,docker run -it docker.io/centos:latest /bin/bash(执行指令必须是容器里有这个启动命令,而不是承载的系统的启动命令,可以不加此项,用的是镜像默认启动命令) -itd (放入后台运行)
开启另一个终端(查看容器信息),docker ps(相当于virsh list)
完整的镜像名(镜像名:镜像标签)

Docker基本命令

命令列表:docker images #查看镜像列表
docker history #查看镜像制作历史
docker inspect #查看详细信息(可以加容器,或者镜像)
docker pull/push #下载/上传镜像
docker rmi #删除本地镜像
docker save #镜像另存为tar包,相当于备份
docker load #使用tar包导入镜像
docker search #搜索镜像(网络搜索)
docker tag #修改镜像名称和标签(类似创建硬链接)
docker images 查看镜像列表 -镜像仓库名称 -镜像标签 -镜像ID -创建时间 -大小

[root@docker1 ~]# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/busybox   latest              19485c79a9bb        5 weeks ago         1.22 MB

docker history 查看镜像历史 -了解镜像制作过程 -详细参考后面的dockerfile内容

[root@docker2 ~]# docker history abc:latest
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
42b4762643dc        8 months ago        /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon    0 B                 
<missing>           8 months ago        /bin/sh -c #(nop)  STOPSIGNAL SIGTERM           0 B                 
<missing>           8 months ago        /bin/sh -c #(nop)  EXPOSE 80                    0 B                 
<missing>           8 months ago        /bin/sh -c ln -sf /dev/stdout /var/log/nginx/   0 B                 
<missing>           8 months ago        /bin/sh -c set -x  && apt-get update  && apt-   53.9 MB             
<missing>           8 months ago        /bin/sh -c #(nop)  ENV NJS_VERSION=1.15.8.0.2   0 B                 
<missing>           8 months ago        /bin/sh -c #(nop)  ENV NGINX_VERSION=1.15.8-1   0 B                 
<missing>           8 months ago        /bin/sh -c #(nop)  LABEL maintainer=NGINX Doc   0 B                 
<missing>           8 months ago        /bin/sh -c #(nop)  CMD ["bash"]                 0 B                 
<missing>           8 months ago        /bin/sh -c #(nop) ADD file:a65337a57a064a79ad   55.28 MB

docker inspect 查看镜像底层信息 -了解镜像环境变量、存储卷、标签、默认启动命令等信息

[root@docker2 ~]# docker inspect abc:latest
[
    {
        "Id": "sha256:42b4762643dcc9bf492b08064b55fef64942f055f0da91289a8abf93c6d6b43c",
        "RepoTags": [
            "abc:latest",
            "docker.io/nginx:latest"
        ],
        "RepoDigests": [],
        "Parent": "",
        "Comment": "",
        "Created": "2019-01-22T23:27:32.707341021Z",
        "Container": "b286effbae9a81971c40c928ca15a4c12d9690f304a0902f05267d1105abd38a",
        "ContainerConfig": {
            "Hostname": "b286effbae9a",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NGINX_VERSION=1.15.8-1~stretch",
                "NJS_VERSION=1.15.8.0.2.7-1~stretch"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"nginx\" \"-g\" \"daemon off;\"]"
            ],
            "ArgsEscaped": true,
            "Image": "sha256:631adb2ddcd756d307cc597477ed3cd2bba366278bfdcf3ab822f9dd47850d9c",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "maintainer": "NGINX Docker Maintainers \u003cdocker-maint@nginx.com\u003e"
            },
            "StopSignal": "SIGTERM"
        },
        "DockerVersion": "18.06.1-ce",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NGINX_VERSION=1.15.8-1~stretch",
                "NJS_VERSION=1.15.8.0.2.7-1~stretch"
            ],
            "Cmd": [
                "nginx",
                "-g",
                "daemon off;"
            ],
            "ArgsEscaped": true,
            "Image": "sha256:631adb2ddcd756d307cc597477ed3cd2bba366278bfdcf3ab822f9dd47850d9c",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "maintainer": "NGINX Docker Maintainers \u003cdocker-maint@nginx.com\u003e"
            },
            "StopSignal": "SIGTERM"
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 109182523,
        "VirtualSize": 109182523,
        "GraphDriver": {
            "Name": "devicemapper",
            "Data": {
                "DeviceId": "5",
                "DeviceName": "docker-253:1-37748835-9344ab75033b512855c8aa7362317ae5a23d32c67264811ef44674cfa1a9c2a0",
                "DeviceSize": "10737418240"
            }
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:3c816b4ead84066ec2cadec2b943993aaacc3fe35fcd77ada3d09dc4f3937313",
                "sha256:787822cf1b17268c7ad2114a7f58fb2743387a5e183815f3f0f1a8a109d33e07",
                "sha256:89decbdf7fb7815678e6f46c9035cdc5c04aeaa1ef63469403d777d5fd14abb8"
            ]
        }
    }
]

docker rmi 删除本地镜像(需先删除镜像启动的容器,才能删除镜像) -注意:启动容器时删除镜像会提示错误

[root@docker1 ~]# docker rmi docker.io/nginx:latest
Error response from daemon: conflict: unable to remove repository reference "docker.io/nginx:latest" (must force) - container 0fd43ff54085 is using its referenced image 42b4762643dc

docker tag 重命名镜像名称(复制改名,没有创建新的镜像),默认标签都是latest

[root@docker2 ~]# docker tag docker.io/centos:latest bcd:latest
[root@docker2 ~]# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
abc                 latest              42b4762643dc        8 months ago        109.2 MB
docker.io/nginx     latest              42b4762643dc        8 months ago        109.2 MB
docker.io/ubuntu    latest              20bb25d32758        8 months ago        87.47 MB
bcd                 latest              76d6bc25b8a5        12 months ago       199.7 MB
docker.io/centos    latest              76d6bc25b8a5        12 months ago       199.7 MB

容器常用命令

命令列表: -docker run #运行容器 (后面跟容器id,一般前四位唯一,四位即可代表容器)
-docker ps #查看容器列表 -a显示所以(all)
-docker stop #关闭容器
-docker start #启动容器
-docker restart #重启容器
-docker attach|exec #进入容器
-docker inspect #查看容器底层信息
-docker top #查看容器进程列表
-docker rm #删除容器(删除时,容器必须是停止运行的)
ps -ef | grep sleep #查看某一进程
docker attach|exec 都是进入容器
docker attach 进入容器,exit会导致容器关闭(保错维护用),上帝进程进入,进入后可以ctrl+p+q放入后台
docker exec 进入容器,退出时不会关闭容器(日常维修用),产生一个子进程

[root@docker1 ~]# docker ps
CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS              PORTS               NAMES
d8338102489e        docker.io/centos:latest    "/bin/bash"              29 minutes ago      Up 29 minutes                           happy_morse
84e2a84e07bb        docker.io/redis:latest     "docker-entrypoint.sh"   30 minutes ago      Up 30 minutes       6379/tcp            elated_mayer
e47f2d62d51a        docker.io/busybox:latest   "sh"                     32 minutes ago      Up 32 minutes                           evil_dijkstra
[root@docker1 ~]# docker attach e47f2d62d51afb7ea2e1c7a0e4f439703e5291b0f9b708496958cb19c177df54 
/ # exit
[root@docker1 ~]# docker ps
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS               NAMES
d8338102489e        docker.io/centos:latest   "/bin/bash"              29 minutes ago      Up 29 minutes                           happy_morse
84e2a84e07bb        docker.io/redis:latest    "docker-entrypoint.sh"   31 minutes ago      Up 31 minutes       6379/tcp            elated_mayer
[root@docker1 ~]# docker exec -it d833 bash
[root@d8338102489e /]# exit
exit
[root@docker1 ~]# docker ps
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS               NAMES
d8338102489e        docker.io/centos:latest   "/bin/bash"              32 minutes ago      Up 32 minutes                           happy_morse
84e2a84e07bb        docker.io/redis:latest    "docker-entrypoint.sh"   33 minutes ago      Up 33 minutes       6379/tcp            elated_mayer

–>iproute ifconfig–>net-tools pstree–>psmisc
docker top #查看容器进程列表

[root@docker1 ~]# docker ps
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS               NAMES
84e2a84e07bb        docker.io/redis:latest   "docker-entrypoint.sh"   54 minutes ago      Up 54 minutes       6379/tcp            elated_mayer
[root@docker1 ~]# docker top 84e2
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
polkitd             26316               26300               0                   15:57               pts/2               00:00:02            redis-server *:6379

linux系统分,redhat(市场占额70%),debian(占28%,ubuntu系统,用法和redhat系统差不多,除rpm和yum命令不同,对应的是dpkg和qpt-get命令,包名为.deb结尾,文件存放也没有太大区别),other(占2%)

nginx镜像容器如何配置web页面

docker run -itd docker.io/nginx #放入后台
docker exec -it id值 //bin/bash #进入
apt -l #查看以安装的软件
nginx -T #查看nginx相关配置文件路径
写首页文件
退出后,docker inspect id号,查看容器ip地址
curl http://IP地址,访问即可

centos镜像容器如何配置web页面

docker run --privileged -itd docker.io/centos /usr/sbin/bash #提权进入并放入后台
docker exec -it id值 /bin/bash #子进程进入
配置yum源,装包(httpd,iproute,psmisc,net-tools等)
查看httpd启动命令cat /usr/lib/systemd/system/httpd.service
启动http ctrl+p+q 放入后台,写网页文件,退出访问即可

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值