热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Centos7——docker入门(笔记)

docker入门(笔记)一、Docker是什么?官方原话:Dockerprovidesawaytorunapplicationssecurelyisolate

docker 入门(笔记)

一、Docker是什么?

  官方原话: Docker provides a way to run applications securely isolated in a container, packaged with all its dependencies and libraries.  

  Docker Documentation: https://docs.docker.com/get-started/

二、Docker应用场景:

  在非常低的额外开销的情况下,打造一个一致性的环境。 

  • 简化配置
  • 代码流水线(Code Pipeline)管理
  • 提高开发效率
  • 隔离应用
  • 整合服务器
  • 调试能力Docker
  • 多租户环境
  • 快速部署

三、Docker改变了什么

  • 面向产品:产品交付
  • 面向开发:简化环境配置
  • 面向测试:多版本测试
  • 面向运维:环境一致性
  • 面向架构:自动化扩容(微服务)

四、环境准备

[root@localhost ~]# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core) 
[root@localhost ~]# uname -r
3.10.0-862.11.6.el7.x86_64

五、安装docker

[root@localhost ~]# yum install -y docker Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com Package 2:docker-1.13.1-74.git6e3bb8e.el7.centos.x86_64 already installed and latest version Nothing to do [root@localhost ~]# systemctl start docker [root@localhost ~]# systemctl enable docker [root@localhost ~]# docker version Client: Version: 1.13.1 API version: 1.26 Package version: docker-1.13.1-74.git6e3bb8e.el7.centos.x86_64 Go version: go1.9.4 Git commit: 6e3bb8e/1.13.1 Built: Tue Aug 21 15:23:37 2018 OS/Arch: linux/amd64 Server: Version: 1.13.1 API version: 1.26 (minimum version 1.12) Package version: docker-1.13.1-74.git6e3bb8e.el7.centos.x86_64 Go version: go1.9.4 Git commit: 6e3bb8e/1.13.1 Built: Tue Aug 21 15:23:37 2018 OS/Arch: linux/amd64 Experimental: false [root@localhost ~]# systemctl start docker.service

六、Docker镜像管理

# 搜索所有centos的docker镜像

[root@localhost ~]# docker search centos
INDEX       NAME                                         DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/centos                             The official build of CentOS.                   4642      [OK]       
docker.io   docker.io/ansible/centos7-ansible            Ansible on Centos7                              115                  [OK]
docker.io   docker.io/jdeathe/centos-ssh                 CentOS-6 6.10 x86_64 / CentOS-7 7.5.1804 x...   99                   [OK]

 #可以使用docker pull命令来从仓库获取所需要的镜像。下面的例子将从Docker Hub仓库下载一个Centos操作系统的镜像。

[root@localhost ~]# docker pull centos
Using default tag: latest
Trying to pull repository docker.io/library/centos ... 
latest: Pulling from docker.io/library/centos
Digest: sha256:6f6d986d425aeabdc3a02cb61c02abb2e78e57357e92417d6d58332856024faf
Status: Image is up to date for docker.io/centos:latest
[root@localhost ~]# docker run -it centos /bin/bash 
# 完成后可以使用该镜像创建一个容器 
[root@2a1b7476db10 /]# ls  
anaconda-post.log  bin  dev etc home  lib lib64  media mnt opt proc root run  sbin  srv sys  tmp  usr var 

# 镜像的ID唯一标识了镜像,如果ID相同,说明是同一镜像。TAG信息来区分不同发行版本,如果不指定具体标记,默认使用latest标记信息。

[root@2a1b7476db10 /]# exit
exit
# 查看docker镜像
[root@localhost ~]# docker images
REPOSITORY(来自那个仓库) TAG(标签)           IMAGE ID(唯一ID)    CREATED(创建时间)   SIZE(大小)
docker.io/nginx          latest              71c43202b8ac        19 hours ago        109 MB
docker.io/centos         latest              5182e96772bf        3 weeks ago         200 MB
docker.io/tutum/centos   latest              99a633ad346f        2 years ago         297 MB
[root@localhost ~]# 

# 如果要移除本地的镜像,可以使用docker rmi命令(在删除镜像之前先用docker rm删除依赖于这个镜像的所有容器)。注意docker rm 命令是移除容器。

[root@localhost ~]# docker rmi 99a633ad346f  # 删除docker镜像
Untagged: docker.io/tutum/centos:latest
Untagged: docker.io/tutum/centos@sha256:b4de18abfef698f6ae3a4921d6f58edef8fc770c6ee5da7636fa4ea51ab545c5
Deleted: sha256:99a633ad346ff9debae2e18ef28e36da72c4535d936500e497cd34377173d4b6
Deleted: sha256:e72d160abbd5585d403996036763c88e9624c70d9d80d6fb0e1ccb2c49b8a26d
Deleted: sha256:8f201733668a3ce8ce77a0dc8b2d7249cdc70b1022a7fc78650527a6f3ec09b6
Deleted: sha256:8fdcefb6d553194a6881387055c1d4110bc385d3dbf4d51b0aa07f1251e877ef
Deleted: sha256:8f98c28a55c2e54cf8b8815d843cbfaf1495dd0bf601774f27da1cbe80183225
Deleted: sha256:6163e9854471a9b6c817b9514d6b8d1cf7be7684fa0c52d76d42188e28785859
Deleted: sha256:85946201865d0456e3d2db4df8699ecc017f2a8df599a1c0b241d30e8f942ed6
Deleted: sha256:3b6d6efff38bc7552b4e42d78a142460dd122efe3f86a921298e82d60f770c85
Deleted: sha256:28508c96f9bffc44568bdcf1d0cd20a0357a106a18440302ba67ee4c68a3ccad
Deleted: sha256:33b3813290610f3880214f35c32d2175adfcc75500cae48dfdbcbcf31928a1ac
Deleted: sha256:ce3c560f1cfc18c6febc0a8ed4f8330d32df64e52fa0b34b82d42ad35406ac39
Deleted: sha256:cf032be00d9aedaf94363af683f83fda44140490759c1c048584dc9b3dd1f34e
Deleted: sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef
[root@localhost ~]# 

# 如果要导出镜像到本地文件,可以使用docker save命令。

[root@localhost ~]# docker save centos > /opt/centos.tar.gz  # 导出docker镜像至本地
[root@localhost ~]# ls -l /opt/centos.tar.gz 
-rw-r--r--. 1 root root 208301056 Aug 30 06:47 /opt/centos.tar.gz
[root@localhost ~]# du -sh /opt/centos.tar.gz 
199M	/opt/centos.tar.gz
[root@localhost ~]# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/nginx     latest              71c43202b8ac        19 hours ago        109 MB
docker.io/centos    latest              5182e96772bf        3 weeks ago         200 MB

 # 可以使用docker load从本地文件中导入到本地docker镜像库

[root@localhost ~]# docker load </opt/centos.tar.gz # 导入本地镜像到docker镜像库
Loaded image: docker.io/centos:latest
[root@localhost ~]# docker images			# 查看镜像导入情况
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/nginx     latest              71c43202b8ac        19 hours ago        109 MB
docker.io/centos    latest              5182e96772bf        3 weeks ago         200 MB
[root@localhost ~]# 

 七、Docker管理

Docker的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。启动容器有两种方式:

  1. 基于镜像新建一个容器并启动;
  2. 将在终止状态(stopped)的容器重新启动。

# 新建容器并启动

[root@localhost ~]# docker run centos /bin/echo 'Hello,World!' # 这跟在本地直接执行 /bin/echo ‘Hello,World’一样  
Hello,World!
[root@localhost ~]# docker run --name mycentos -it centos /bin/bash # 启动一个bash终端,允许用户进行交互。
[root@e930e732fa58 /]# 
  • –name:给容器定义一个名称
  • -i:则让容器的标准输入保持打开。
  • -t:让Docker分配一个伪终端,并绑定到容器的标准输入上
  • /bin/bash:执行一个命令

当利用docker run来创建容器时,Docker在后台运行的标准操作包括:

  1. 检查本地是否存在指定的镜像,不存在就从公有仓库下载
  2. 利用镜像创建并启动一个容器
  3. 分配一个文件系统,并在只读的镜像层外面挂在一层可读写层
  4. 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  5. 从地址池配置一个ip地址给容器
  6. 执行用户指定的应用程序
  7. 执行完毕后容器被终止

# 启动已终止的容器

  可以利用docker start命令,直接将一个已经终止的容器启动运行。容器的核心为所执行的应用程序,所需要的资源都是应用程序运行所必需的。除此之外,并没有其他的资源。可以在伪终端中利用ps和top来查看进程信息。

[root@localhost ~]# docker start mycentos # 启动一个终止的容器
mycentos
[root@localhost ~]# docker ps -a  # 查看是否启动
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
e930e732fa58        centos              "/bin/bash"              8 minutes ago       Up 8 seconds                                    mycentos
19992e1d2669        centos              "/bin/echo Hello,W..."   9 minutes ago       Exited (0) 9 minutes ago                        distracted_borg
……
[root@localhost ~]# 

# 守护进程运行

  如果需要让Docker容器在后台以守护形式运行。此时可以通过添加-d参数来实现。


[root@localhost ~]# docker run -d centos /bin/bash -c 'while true; do echo "Hello,World!"; sleep 1;done'
a017e98a7ce8e8675d077fff1237886f8de8a59ce6b24d4774de009621ce5449
[root@localhost ~]# docker ps # 列出容器
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
a017e98a7ce8        centos              "/bin/bash -c 'whi..."   18 seconds ago      Up 17 seconds                           mystifying_mclean
ff3c866aa8c8        docker.io/centos    "/bin/bash"              4 hours ago         Up 4 hours                              inspiring_torvalds
[root@localhost ~]# docker logs a017e98a7ce8 # 获取容器输出信息,通过dockerlogs命令
Hello,World!
Hello,World!
Hello,World!
Hello,World!
……
[root@localhost ~]# 

# 停止容器

  可以使用docker stop来终止一个运行中的容器。此外,当Docker容器中指定的应用终结时,容器也自动终止。例如启动一个终端的容器,用户通过exit命令或者ctrl+d来退出终端时,所创建的容器立刻终止。

  终止状态的容器可以用docker ps -a命令看到,也可以通过docker start ID 命令来启动容器。


[root@localhost ~]# docker ps  # 列出容器
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
a017e98a7ce8        centos              "/bin/bash -c 'whi..."   3 minutes ago       Up 3 minutes                            mystifying_mclean
ff3c866aa8c8        docker.io/centos    "/bin/bash"              4 hours ago         Up 4 hours                              inspiring_torvalds
[root@localhost ~]# docker stop a017e98a7ce8 # 停止指定ID的容器 a017e98a7ce8
[root@localhost ~]# docker ps	# 指定ID的容器已经看不到了
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
ff3c866aa8c8        docker.io/centos    "/bin/bash"         4 hours ago         Up 4 hours                              inspiring_torvalds
[root@localhost ~]#

 # 删除容器


[root@localhost ~]# docker ps -a                # 查看所有容器当前状态
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                        PORTS               NAMES
78e4523d92c3        centos              "/bin/bash -c 'whi..."   About a minute ago   Exited (137) 51 seconds ago                       relaxed_swirles
ff3c866aa8c8        docker.io/centos    "/bin/bash"              4 hours ago          Up 4 hours                                        inspiring_torvalds
[root@localhost ~]# docker rm `docker ps -a -q`        # 删除所有的容器
78e4523d92c3
Error response from daemon: You cannot remove a running container ff3c866aa8c8e342a5418f8de9eaec6f7445a03c420cdc35b1b5a39a9c07e237. Stop the container before attempting removal or use -f [root@localhost ~]# docker ps -a                # 查看所有容器当前状态,发现运行中的容器未删除
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
ff3c866aa8c8        docker.io/centos    "/bin/bash"         4 hours ago         Up 4 hours                              inspiring_torvalds
[root@localhost ~]# docker rm -f ff3c866aa8c8	        # 删除正在运行的容器
ff3c866aa8c8
[root@localhost ~]# docker ps -a				# 查看所有的容器
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@localhost ~]#

# 进入容器

  使用-d参数时,容器启动后会进入后台。某些时候需要进入容器进行操作,有很多种方法,包括使用docker attach命令或nsenter工具等。

1、docker attach是Docker自带的命令:

[root@localhost ~]# docker ps -a        # 查看所有的容器当前状态
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS       
3a67130228df        docker.io/centos    "/bin/bash -c 'whi..."   About a minute ago   Up About a minute               
[root@localhost ~]# docker attach 3a67130228df # 一直卡在这里,不知道是不是因为没有ssh访问的原因  

于是我重新pull一个带ssh的centos镜像


[root@localhost ~]# docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
docker.io/nginx          latest              71c43202b8ac        20 hours ago        109 MB
docker.io/centos         latest              5182e96772bf        3 weeks ago         200 MB
docker.io/tutum/centos   latest              99a633ad346f        2 years ago         297 MB # 就是它!
[root@localhost ~]# docker run -d --name newcentos docker.io/tutum/centos /bin/bash -c 'while true; do echo Hello,Wolrd;sleep 1;done' # 启动容器
5c9d7d40e4d8e6654a4592681d97826558c2e3f30b7c264f8487a8f387dda30e
[root@localhost ~]# docker logs 5c9d7d40e4d8e6654a4592681d97826558c2e3f30b7c264f8487a8f387dda30e # 一直有输出,我放心了
Hello,Wolrd
Hello,Wolrd
Hello,Wolrd
Hello,Wolrd
Hello,Wolrd
Hello,Wolrd
Hello,Wolrd
Hello,Wolrd
[root@localhost ~]# docker ps # 列出容器
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS               NAMES
5c9d7d40e4d8        docker.io/tutum/centos   "/bin/bash -c 'whi..."   12 seconds ago      Up 11 seconds       22/tcp              newcentos
3a67130228df        docker.io/centos         "/bin/bash -c 'whi..."   14 minutes ago      Up 14 minutes                           zen_golick
[root@localhost ~]# docker attach 5c9d7d40e4d8 # 进入容器
Hello,Wolrd
Hello,Wolrd
Hello,Wolrd
Hello,Wolrd

 但是使用attach命令有时候并不方便。当多个窗口同时attach到同一个容器的时候,所有的窗口都会同步显示,当某个窗口因命令阻塞时,其他窗口也无法执行操作了。

2、nsenter命令

  nsenter可以访问另一个进程的名字空间。nsenter需要有root权限。


[root@localhost ~]# docker ps            # 列出容器
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS   
5c9d7d40e4d8        docker.io/tutum/centos   "/bin/bash -c 'whi..."   6 minutes ago       Up 6 minutes        22/tcp  
3a67130228df        docker.io/centos         "/bin/bash -c 'whi..."   20 minutes ago      Up 20 minutes               
[root@localhost ~]#  yum install -y util-linux  # 安装包中有需要用到的nsenter
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Package util-linux-2.23.2-52.el7_5.1.x86_64 already installed and latest version
Nothing to do
[root@localhost ~]# docker inspect --format "{{.State.Pid}}" 5c9d7d40e4d8 #找到容器的第一个进程PID
13333
[root@localhost ~]# nsenter -t 13333 -u -i -n -p # 通过这个PID连接到容器
[root@5c9d7d40e4d8 ~]# # 进入容器中

  方便起见,将这2条命令脚本化

[root@192.168.0.155]$~:> cat in.sh 
#!/bin/bash
# zuoyang@jd.com
PID=$(docker inspect --format “{{.State.Pid}}” $1)
nsenter -t $PID -u -i -n -p 

推荐阅读
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • Centos7搭建ELK(Elasticsearch、Logstash、Kibana)教程及注意事项
    本文介绍了在Centos7上搭建ELK(Elasticsearch、Logstash、Kibana)的详细步骤,包括下载安装包、安装Elasticsearch、创建用户、修改配置文件等。同时提供了使用华为镜像站下载安装包的方法,并强调了保证版本一致的重要性。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • MongoDB用户验证auth的权限设置及角色说明
    本文介绍了MongoDB用户验证auth的权限设置,包括readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase、cluster相关的权限以及root权限等角色的说明和使用方法。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
author-avatar
温艺海
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有