Docker介绍及常用操作演示(一)--技术流ken
Docker简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
- dockerClient客户端
- Docker Daemon守护进程
- Docker Image镜像
- DockerContainer容器
容器:
存储、运输工具
实现对容器内部的物品实现包含(实现了一个相对隔离的环境)
容器:模拟(虚拟)出一个相对隔离的空间
镜像:
用来创建容器的模版,放在镜像仓库中,例如nginx,redis,httpd等
Docker与Kvm的对比
kvm:
1. 虚拟机
2. 使用复杂
3. 启动过程相对慢(分钟)
4. 模版文件较大
5. 和物理完全隔离
6. 模拟的是一个完整系统,可以登录并实现管理
docker:
1. 直接虚拟出来一个用户空间
2. 使用简单
3. 启动非常块(秒级)
4. 模版文件很小
5. 在一定程度上和物理机隔离
6. 仅仅是模拟一部分用户空间,不方便管理
Docker使用理由
1. 快速部署服务
2. 多租户
3. 实现隔离
4. 让一个主机运行多个容器
5. 提高开发效率
6. 简化配置过程
7. 实现软件的跨平台
Docker镜像加速配置
第一步:打开阿里云网站
https://www.aliyun.com/?utm_content=se_1000301910
第二步:进行阿里云注册
略
第三步:点击控制台
第四步:点击产品与服务>镜像与服务
第五步:点击镜像加速器,记住自己的加速器地址
Docker的安装与配置
安装docker需要配置网络yum源,centos7自带的版本太低了
第一步:下载阿里云的docker安装包
在yum仓库的目录之下
[root@localhost yum.repos.d]# wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
还需要使用到extra和epel源
[extra]
name=centos extra
enabled=
gpgcheck=
baseurl=https://mirrors.aliyun.com/centos/7/extras/x86_64/
[epel]
name=epel
enabled=
gpgcheck=
baseurl=https://mirrors.aliyun.com/epel/7Server/x86_64/
第二步:使用yum即可进行安装
docker-ce是社区版,是免费的
docker-ee是企业版,是收费的
这里我们下载社区版的
[root@ken ~]# yum install docker-ce -y
第三步:添加加速器地址
把刚才注册得到的镜像加速地址如下步骤填写进去
[root@ken ~]# mkdir /etc/docker
[root@ken ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://XXX.mirror.aliyuncs.com"]
}
第四步:重启docker
[root@ken ~]# systemctl restart docker
Docker有关镜像的操作命令详解
第一步:获取镜像的使用帮助
[root@ken ~]# docker image --help Usage: docker image COMMAND Manage images
第二步:docker镜像的使用命令详解
build 从docker文件里面创建镜像
history 显示一个镜像的历史
import 从tarball导入内容以创建文件系统映像
inspect 显示一个一个或多个镜像的详细信息
load 加载一个镜像从tar压缩包或者标准输入
ls 列出镜像
prune 移除没有被使用的镜像
pull 从注册处拉取一个镜像或者镜像库
push 把一个镜像或者镜像库推送至注册处
rm 移除一个或多个镜像
save 保存一个或者多个镜像到tar压缩包,默认情况下流式传输到
tag 创建一个引用SOURCE_IMAGE的标记TARGET_IMAGE
Docker镜像的操作命令演示
一. 查看注册表中是否有nginx镜像
[root@ken ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con?? [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of?? [OK]
jrcs/letsencrypt-nginx-proxy-companion LetsEncrypt container to use with nginx as p?? [OK]
kong Open-source Microservice & API Management la?? [OK]
webdevops/php-nginx Nginx with PHP-FPM [OK]
kitematic/hello-world-nginx A light-weight nginx container that demonstr??
...
二.下载nginx镜像
[root@ken ~]# docker image pull nginx
三:查看本地镜像
[root@ken ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest e81eb098537d days ago 109MB
四:导入镜像
这里我准备了一个redis的镜像压缩包
这样就获取到了redis的镜像
压缩包不需要解压
[root@ken ~]# docker image load < redis_img.tar.gz
d626a8ad97a1: Loading layer [==================================================>] .46MB/.46MB
fd0ff4158c63: Loading layer [==================================================>] .4kB/.4kB
f1e69ab74fb6: Loading layer [==================================================>] .034MB/.034MB
5935063a73de: Loading layer [==================================================>] .83MB/.83MB
72ebea29957d: Loading layer [==================================================>] .536kB/.536kB
56631ad86187: Loading layer [==================================================>] .584kB/.584kB
Loaded image: redis:latest
[root@ken ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest e81eb098537d days ago 109MB
redis latest 55cb7014c24f months ago .4MB
[root@ken ~]#
五:镜像导出
写成压缩包的形式
[root@ken ~]# docker image save nginx > /tmp/nginx.tar.gz
[root@ken ~]# ls /tmp/nginx.tar.gz
/tmp/nginx.tar.gz
六:显示nginx镜像的详细信息
[root@ken ~]# docker inspect nginx
[
{
"Id": "sha256:e81eb098537d6c4a75438eacc6a2ed94af74ca168076f719f3a0558bd24d646a",
"RepoTags": [
"nginx:latest"
],
"RepoDigests": [
"nginx@sha256:31b8e90a349d1fce7621f5a5a08e4fc519b634f7d3feb09d53fac9b12aa4d991"
],
"Parent": "",
"Comment": "",
"Created": "2018-11-16T13:32:10.147294787Z",
"Container": "d4fa15093ad8ad3df60d7403c1752a379503686e32a76b70771b3ea268ec5d66",
"ContainerConfig": {
"Hostname": "d4fa15093ad8",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
...
七:删除nginx的镜像
[root@ken ~]# docker image rm nginx
Untagged: nginx:latest
Untagged: nginx@sha256:31b8e90a349d1fce7621f5a5a08e4fc519b634f7d3feb09d53fac9b12aa4d991
Deleted: sha256:e81eb098537d6c4a75438eacc6a2ed94af74ca168076f719f3a0558bd24d646a
Deleted: sha256:7055505a92c39c6f943403d54a1cda020bfeb523b55d9d78bfe1dad0dd32bb2d
Deleted: sha256:378a8fcc106dc4d3a9f2dc0b642b164e25de3aab98a829e72b2d8c0cf0bad8ee
Deleted: sha256:ef68f6734aa485edf13a8509fe60e4272428deaf63f446a441b79d47fc5d17d3
[root@ken ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 55cb7014c24f months ago .4MB
Docker有关容器的操作命令详解
第一步:获取容器的命令的使用帮助
[root@ken ~]# docker container --help Usage: docker container COMMAND Manage containers
第二步:docker容器的使用命令详解
attach 将本地标准输入,输出和错误流附加到正在运行的容器
commit 根据容器的更改创建新镜像
cp 在容器和本地文件系统之间复制文件/文件夹
create 创建一个新的容器
diff 检查容器文件系统上的文件或目录的更改
exec 在正在运行的容器中运行命令
export 将容器的文件系统导出为tar存档
inspect 显示一个或多个容器的详细信息
kill 杀死一个或多个正在运行的容器
logs 获取容器的日志
ls 列出容器
pause 暂停一个或多个容器中的所有进程
port 列出端口映射或容器的特定映射
prune 删除所有已停止的容器
rename 重命名容器
restart 重启一个或多个容器
rm 删除一个或多个容器
run 在新容器中运行命令
start 启动一个或多个已停止的容器
stats 显示容器资源使用情况统计信息的实时流
stop 停止一个或多个正在运行的容器
top 显示容器的运行进程
unpause 取消暂停一个或多个容器中的所有进程
update 更新一个或多个容器的配置
wait 等待,直到一个或多个容器停止,然后打印退出代码
Docker容器的操作命令演示
一.启动redis容器
--name:指定容器名字
-d:表示后台运行
[root@ken ~]# docker container run --name redis1 -d redis
4cd31fa09d483ed87c8fe390a49c13fdba0652df33e2ae1cb44a1f8426578afd
二.查看容器
使用ls
[root@ken ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4cd31fa09d48 redis "docker-entrypoint.s?? 39 seconds ago Up 38 seconds 6379/tcp redis1
三.查看所有的容器
ps -a: 列出所有的容器包括运行和停止的
ps: 仅仅列出正在运行的
[root@ken ~]# docker container ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4cd31fa09d48 redis "docker-entrypoint.s?? About a minute ago Up About a minute 6379/tcp redis1
054bc8b8aab7 redis "docker-entrypoint.s?? 2 minutes ago Exited (0) 2 minutes ago confident_goldstine
四.查看容器的详细信息
inspect后面加上容器名字即可获取有关容器的详细信息
[root@ken ~]# docker container inspect redis1
[
{
"Id": "4cd31fa09d483ed87c8fe390a49c13fdba0652df33e2ae1cb44a1f8426578afd",
"Created": "2018-11-26T20:22:23.099937767Z",
"Path": "docker-entrypoint.sh",
"Args": [
"redis-server"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
...
五.停止容器
使用stop
[root@ken ~]# docker container stop redis1
redis1
[root@ken ~]# docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
六.启动容器
使用start
[root@ken ~]# docker container start redis1
redis1
[root@ken ~]# docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4cd31fa09d48 redis "docker-entrypoint.s?? 8 minutes ago Up 1 second 6379/tcp redis1
七.登录容器
第一种方法:
exec -it 容器名 /bin/sh
-i: 表示启动为交互模式
-t:表示分配一个终端
登录进去之后发现我们可以执行有挂redis的命令了
[root@ken ~]# docker container exec -i -t redis1 /bin/sh
#
#
# redis-cli
127.0.0.1:> set ken
OK
127.0.0.1:> get ken
""
退出之后容器没有停止
[root@ken ~]# docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4cd31fa09d48 redis "docker-entrypoint.s?? 13 minutes ago Up 4 minutes 6379/tcp redis1
第二种方法:
attach:会导致当退出的时候,自动停止容器
不建议使用
[root@ken ~]# docker container attach redis1 ^C1:signal-handler () Received SIGINT scheduling shutdown...
:M Nov ::44.315 # User requested shutdown...
:M Nov ::44.315 * Saving the final RDB snapshot before exiting.
:M Nov ::44.327 * DB saved on disk
:M Nov ::44.327 # Redis is now ready to exit, bye bye...
[root@ken ~]# docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
第三种方法:
基于nsenter进入
第一步:启动容器
[root@ken ~]# docker container start redis1
redis1
[root@ken ~]# docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4cd31fa09d48 redis "docker-entrypoint.s?? 16 minutes ago Up 6 seconds 6379/tcp redis1
第二步:获取容器的pid
[root@ken ~]# docker container inspect -f '{{.State.Pid}}' redis1
第三步:登录容器
-t: 从中获取名称空间的目标进程
-u: 输入UTS名称空间(主机名等)
-i: 进入System V IPC命名空间
-n: 输入网络命名空间
-p:输入pid命名空间
[root@ken ~]# nsenter -t -u -i -n -p
[root@4cd31fa09d48 ~]# ps
PID TTY TIME CMD
pts/ :: bash
pts/ :: nsenter
pts/ :: bash
pts/ :: ps
退出时不会停止容器
[root@4cd31fa09d48 ~]# exit
logout
[root@ken ~]# docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4cd31fa09d48 redis "docker-entrypoint.s?? 23 minutes ago Up 6 minutes 6379/tcp redis1
八.删除容器
第一步:需要停止容器
[root@ken ~]# docker container stop redis1
redis1
[root@ken ~]# docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
第二步:删掉容器
[root@ken ~]# docker container rm redis1
redis1
[root@ken ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
补充:一次性删除全部已经退出的容器
[root@ken1 ~]# docker rm $(docker ps -aq)
Docker介绍及常用操作演示(一)--技术流ken的更多相关文章
- Docker介绍及常用操作演示(一)
Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互 ...
- Ansible常用模块介绍及使用(week5_day1_part2)--技术流ken
Ansible模块 在上一篇博客<Ansible基础认识及安装使用详解(一)--技术流ken>中以及简单的介绍了一下ansible的模块.ansible是基于模块工作的,所以我们必须掌握几 ...
- Git介绍及常用操作演示(一)--技术流ken
Git介绍 Git(读音为/gɪt/.)是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发 ...
- Redis基础认识及常用命令使用(一)--技术流ken
Redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有序集 ...
- Docker多主机管理(八)--技术流ken
docker多主机管理 前面我们的实验环境中只有一个 docker host,所有的容器都是运行在这一个 host 上的.但在真正的环境中会有多个 host,容器在这些 host 中启动.运行.停止和 ...
- Docker端口映射及创建镜像演示(二)--技术流ken
前言 在上一篇博客<Docker介绍及常用操作演示--技术流ken>中,已经详细介绍了docker相关内容以及有关镜像和容器的使用命令演示. 现在我们已经可以自己下载镜像,以及创建容器了. ...
- Redis基础知识补充及持久化、备份介绍(二)--技术流ken
Redis知识补充 在上一篇博客<Redis基础认识及常用命令使用(一)--技术流ken>中已经介绍了redis的一些基础知识,以及常用命令的使用,本篇博客将补充一些基础知识以及redis ...
- Git+Gitlab+Ansible的roles实现一键部署Nginx静态网站(一)--技术流ken
前言 截止目前已经写了<Ansible基础认识及安装使用详解(一)--技术流ken>,<Ansible常用模块介绍及使用(二)--技术流ken><Ansible剧本介绍及 ...
- Redis Cluster集群架构实现(四)--技术流ken
Redis集群简介 通过前面三篇博客的介绍<Redis基础认识及常用命令使用(一)--技术流ken>,<Redis基础知识补充及持久化.备份介绍(二)--技术流ken>,< ...
随机推荐
- 了解ip相关知识
最近一直扫盲,作为一个编程工作者,其实涉及的东西很广,但也一直没有深入一些网络的概念. 内内网IP局域网,网线都是连接在同一个 交换机上面的,也就是说它们的IP地址是由交换机或者路由器进行分配的.而且 ...
- influence maximization
Robust Influence Maximization 首先简要介绍一下这个问题:在一个社交网络图中寻找固定数量的节点,使得这些节点对所有节点的影响值尽可能的大.这个问题由于在病毒式营销,谣言监控 ...
- 使用Calibre自带工具批量转换电子书格式
原来使用Calibre转换电子书格式都是先导入,再转换,再把转换后的文件复制出来,最后再改名. 虽然可以批量导入和转换,但复制和改名要一个处理.后来发现Calibre自带命令行转换工具,就写了一个批处 ...
- ECharts常用设置记录
一.配置文档 http://echarts.baidu.com/option.html#title 二.属性配置 1.图表与边框容器距离. grid: { top: '10%', left: '70' ...
- Python之路【第五篇】函数
4.1 函数的定义 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 4.2 函数的创建 函数名的命名规则: 1.函数名必须以下划线或字母开头,可以包含任 ...
- .Net持续集成 —— Jenkins+Git+WebDeploy
由于某些历史问题,最近终于可以从java中解脱出来,继续耕耘.Net了,第一步就是把之前的java项目翻成.net.之前已经实现过一次,翻起来还是比较快的(当然基础架构/实体模型已经重新思考并改进), ...
- 【转】vim 的各种用法,很实用哦,都是本人是在工作中学习和总结的
原文地址https://www.cnblogs.com/lxwphp/p/7738356.html (一)初级个性化配置你的vim 1.vim是什么? vim是Vi IMproved,是编辑器Vi的一 ...
- Javascript高级编程学习笔记(64)—— 事件(8)键盘与文本事件
键盘与文本事件 用户在使用键盘时会触发键盘事件 “DOM2级事件”最初规定了键盘事件,但是最后在定稿时又删除了相应内容 所以键盘事件被放入了DOM3级事件的规范中 总的来说有三个键盘事件: keydo ...
- Android开发技术周报183学习记录
Android开发技术周报183学习记录 教程 Android性能优化来龙去脉总结 记录 一.性能问题常见 内存泄漏.频繁GC.耗电问题.OOM问题. 二.导致性能问题的原因 1.人为在ui线程中做了 ...
- 第36节:Java当中的线程
Java当中的线程 Java当中的线程,进程和线程的关系?进程就是线程吗?不是的.线程的运行,和方法. 多线程和多进程,多进程为在操作系统中同时进行多个应用程序,如你的电脑可以同时听音乐,同时上网,手 ...