Centos7——docker入门(笔记)
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的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。启动容器有两种方式:
- 基于镜像新建一个容器并启动;
- 将在终止状态(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在后台运行的标准操作包括:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂在一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个ip地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
# 启动已终止的容器
可以利用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
Centos7——docker入门(笔记)的更多相关文章
- Docker入门笔记
Docker入门笔记 随笔记录初学Docker遇到的问题, 以免下次再犯. 本机系统Ubuntu18.04 安装 Docker有2个版本 Community Edition (CE) 社区版(免费) ...
- Docker入门笔记(1)
Docker入门笔记(1) 1.安装Docker yum -y install docker-ce 2.查看Docker版本 [root@localhost ~]# docker -v Docker ...
- Docker入门-笔记-1
Docker入门 Docker 是 Golang 编写的, 自 2013 年推出以来,受到越来越多的开发者的关注.如果你关注最新的技术发展,那么你一定听说过 Docker.不管是云服务还是微服务(Mi ...
- Docker入门笔记(Centos7)
centos7 wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo vim docker-c ...
- Centos7 Docker 安装笔记
1. docker官方文档地址:https://docs.docker.com/ 2. centos版本号查看命令:uname -a centos7.3版本 3. 直接yum -install ...
- Docker 入门笔记
Docker 可以理解为一个轻量化的虚拟机, 启动速度快,本身占的资源小 [重要], 容器里是不能保存数据的,容器只要一停止, 所有的数据都会丢失,所以如果重要的数据, 都需要通过配制,把数据保存在 ...
- 笔记 docker入门笔记
安装sudo apt-get remove docker docker-engine docker-ce docker.iosudo apt-get updatesudo apt-get instal ...
- Docker学习笔记之-部署.Net Core 3.1项目到Docker容器,并使用Nginx反向代理(CentOS7)(一)
上一节演示如何安装Docker,链接:Docker学习笔记之-在CentOS中安装Docker 本节演示 将.net core 3.1 部署到docker容器当中,并使用 Nginx反向代理,部署平台 ...
- Docker学习笔记之--安装mssql(Sql Server)并使用Navicat连接测试(环境:centos7)
前一节演示如何使用Nginx反向代理 .net Core项目容器,地址:Docker学习笔记之-部署.Net Core 3.1项目到Docker容器,并使用Nginx反向代理(CentOS7)(二) ...
随机推荐
- SpringCloud(0) 外行人都能看懂的SpringCloud,错过了血亏!
一.前言 只有光头才能变强 认识我的朋友可能都知道我这阵子去实习啦,去的公司说是用SpringCloud(但我觉得使用的力度并不大啊~~)... 所以,这篇主要来讲讲SpringCloud的一些基础的 ...
- python 爬虫 目录
爬虫 介绍 python 爬虫 urllib模块 python 爬虫 requests模块
- Linux 防火墙开放特定端口 (iptables)
1.查看状态:iptables -L -n2.直接编辑:vi /etc/sysconfig/iptables3.端口开放:-A INPUT -m state --state NEW -m tcp -p ...
- CentOS6、7升级Openssh至7.9
出于安全考虑,定期使用Nessus对服务器进行扫描,最新Nessus提示服务器的SSH版本有漏洞,所以把SSH升级到最新版本 1.为了防止升级失败登陆不了,所以需要安装telnet mkdir /ro ...
- 使用Themleaf 模板引擎手动生成html文件
1.为什么要写这一篇呢? 在做一个邮件发送功能的时候,需要发送html邮件,javaMail 发送html 的时候需要有已经生成的html正文,所以需要提前将要发送的内容生成,所以就需要模板引擎来动态 ...
- Linux学习笔记(15)Linux字符集(locale,LANG,LC_ALL)
关键词:linux系统修改编码,linux字符集问题, 目录 零.什么是locale 一.locale的详细内容 二.理解locale的设置 三 具体设定locale的方法(zh_CN.UTF-8. ...
- MSSQL读取某视图中的字段类型及相关属性
SELECT 新字段类型 = '',表名 = case when a.colorder=1 then d.name else '' end,表说明 = case when a.colorder=1 t ...
- 设计模式:建造者模式(Builder)
流水作业大家应该都清楚吧!在流水作业中,我们可以将一些复杂的东西给构建出来,例如汽车.我们都知道汽车内部构件比较复杂,由很多部件组成,例如车轮.车门.发动机.方向盘等等,对于我们用户来说我们并不需要知 ...
- GitHub从小白到熟悉<五>
GitHub 主页
- Python 入门 之 反射
Python 入门 之 反射 1.反射 : (自省) 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省). Python面向对象中的反射:通过字符串的形式操作对象的相关属性.P ...