1. docker的使用

1> 创建容器

  创建并启动容器: docker run -it -name 容器名 镜像: 版本  /bin/sh(bash)

  创建并不启动容器:docker create -it 镜像:版本

  -t:分配一个伪终端

  -i:让容器的标准输入持续打开

  用/bin/bash(sh)环境显示

2> 查看容器

  查看运行的容器:docker ps

  查看所有的容器:docker ps -a

3> 启动/停止/重启容器

  格式:docker start/stop/restart  name/ID

4> 运行一个容器

  格式:docker run -it -name 容器名 镜像: 版本  /bin/sh

5> 退出一个容器

  Ctrl+D或者exit:退出,并且容器也停止、退出

  Ctrl+Q+P:退出容器,并保持容器的up状态

6> 以后台守护进程的形态运行容器

  用-d参数实现。后台守护进程,而不是进入交互界面

[root@alph ~]# docker run -it centos:
[root@59e925dd9229 /]# exit
exit
[root@alph ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
59e925dd9229 centos: "/bin/bash" seconds ago Exited () seconds ago amazing_mcclintock
[root@alph ~]# docker run -itd centos:
212603201c70a9f6e353d99ec396dec15e0a93cf194c3ae9ac281404537f2a69
[root@alph ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
212603201c70 centos: "/bin/bash" seconds ago Up seconds clever_hypatia

  然后再利用exec命令进入容器,此时退出容器后容器还是运行的状态。

[root@alph ~]# docker exec -it 212603201c70 /bin/sh
sh-4.1# exit
exit
[root@alph ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
212603201c70 centos: "/bin/bash" minutes ago Up minutes clever_hypatia

因此,若要容器持续是up的状态,运行容器时加-d即可。

7> 删除容器

  格式:docker rm opinion name/id

opinion

  -f  强制删除处于运行中的容器

  -l  删除链接,保留容器

  -v 删除挂载的数据卷

8> 进入容器

  docker attach:直接进入容器,启用命令终端,不会启用新的进程

  docker exec:进入容器,在容器中打开新的终端,并且可以启动新的进程

先在后台运行个容器
[root@alph ~]# docker run -d centos: /bin/bash -c "while true; do sleep 1;echo I_am_docker;done" #-c表示执行命令
f8ed47920be073a4f1740cb2a50d9ce929b9bee8a242680f6efa1d567631f232 先用attach命令进容器查看
[root@alph ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f8ed47920be0 centos: "/bin/bash -c 'while…" seconds ago Up seconds dreamy_darwin
[root@alph ~]# docker attach f8ed47920be0
I_am_docker
I_am_docker
I_am_docker
....... #一直在隔一秒打印 再用exec命令进入容器
[root@alph ~]# docker exec -it f8ed47920be0 /bin/sh
sh-4.1# #新建一个终端
sh-4.1#
sh-4.1#
sh-4.1#
[root@alph ~]# docker stop f8ed47920be0
f8ed47920be0

9> 导入和导出容器

导出容器:导出一个已经创建的容器到文件,不管容器是否运行

格式:docker export ID > *.tar

将容器导入系统成为镜像

格式:cat *.tar | docker import - 镜像名

  导入和导出容器命令不常用,常用的是导入和导出镜像的命令 docker save- o / load -i

10> 查看容器的日志

  格式:docker logs -f name/id

11> 暂停容器

  格式:docker pause name/id

12> 取消暂停继续运行容器

  格式:docker unpause name/id

命令

功能

create

创建容器

run

运行容器

pause

暂停容器

unpause

取消暂停继续运行容器

stop

发送 SIGTERM 停止容器

kill

发送 SIGKILL 快速停止容器

start

启动容器

restart

重启容器

attach

attach 到容器启动进程的终端

exec

在容器中启动新进程,通常使用 "-it" 参数

logs

显示容器启动进程的控制台输出,用 "-f" 持续打印

rm

从磁盘中删除容器

2. docker镜像仓库

  仓库(repos-registory)分为公共仓库和私有仓库。

  DockerHub的官方仓库:https://hub.docker.com

  DockerPool社区仓库:https://dl.dockerpool.com

  Dockern Pool (http://dockerpool.com)是国内专业的Docker社区,目前也提供了官方镜像的下载管理服务。

1> 创建私有仓库

启动registry

[root@alph ~]# docker run -d -p : -v /var/lib/registry:/var/lib/registry --restart=always --name registry registry:
ba0c8ab2161308130fb69f9e1b2b25f4669514bcd1245dc5d6e15dc40a75f74c #-p表示指定端口映射,-v表示一个目录映射,一直保持重启指定容器名字为registry,指定镜像:id
[root@alph ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ba0c8ab21613 registry: "/entrypoint.sh /etc…" minutes ago Up minutes 0.0.0.0:->/tcp registry

配置客户端

修改配置文件将私有库加入进去

当用yum安装的,修改配置文件/etc/sysconfig/docker
vim /etc/sysconfig/docker
line : add Docker-Registry's URL
OPTIONS='--insecure-registry 192.168.210.128:5000
--selinux-enabled --log-driver=journald.....'
以二进制安装的docker,修改文件/etc/docker/daemon.json
[root@my_zx ~]# cd /etc/docker/
[root@my_zx docker]# ls
certs.d daemon.json key.json
[root@my_zx docker]# vim daemon.json
{
"registry-mirrors": ["http://cc83932c.m.daocloud.io"],
"insecure-registries": ["192.168.16.88:5000"], #加入该行,写入仓库来源地址
"max-concurrent-downloads": ,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": ""
}
}

重启客户端,并查看客户端镜像

[root@my_zx docker]# systemctl restart docker
[root@my_zx docker]# docker images #暂时没有镜像
REPOSITORY TAG IMAGE ID CREATED SIZE

在服务端将镜像文件导出然后发送给客户端实现镜像的共享

[root@alph ~]# docker save -o registry.tar.gz registry:
[root@alph ~]# ls
anaconda-ks.cfg doc_file docker registry.tar.gz yum-repo.sh
[root@alph ~]# scp registry.tar.gz 192.168.16.8:/root
[root@my_zx ~]# docker load -i registry.tar.gz
[root@my_zx ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest e4db68de4ff2 weeks ago .22MB
registry f32a97de94e1 months ago .8MB

准备将镜像busybox上传至私有仓库

先将镜像busybox重命名。镜像名前面加上地址和5000端口,以免上传至docker镜像官网。

[root@my_zx ~]# docker tag busybox:latest  192.168.16.88:/busybox:latest 

然后将镜像上传至私有仓库

[root@my_zx ~]# docker push 192.168.16.88:/busybox:latest
The push refers to repository [192.168.16.88:/busybox]
6194458b07fc: Pushed
latest: digest: sha256:bf510723d2cd2d4e3f5ce7e93bf1e52c8fd76831995ac3bd3f90ecc866643aff size:

测试是否能从私有仓库下载该镜像,先删除原镜像,再下载镜像

[root@my_zx ~]# docker rmi -f  e4db68de4ff2
[root@my_zx ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry f32a97de94e1 months ago .8MB
[root@my_zx ~]# docker pull 192.168.16.88:/busybox:latest
[root@my_zx ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.16.88:/busybox latest e4db68de4ff2 weeks ago .22MB
registry f32a97de94e1 months ago .8MB

3. docker底层依赖核心技术

  1)        命名空间 (Namespaces)

  2)        控制组 (Control Groups)

  3)        联合文件系统 (Union File System)

  4)        Linux 虚拟网络支持:本地和容器内创建虚拟接口

(1)命名空间 (Namespaces):实现了容器间资源的隔离

  每个容器拥有自己独立的命名空间 , 运行其中的应用就像是运行在独立的操作系统中一样 , 我们都可以看到文件系统,网卡等资源保证了容器之间互不影响,namesaces管理进程号 , 每个进程命名空间有一套自己的进程号管理方法 , 进程命名空间是一个父子关系的结构 , 子空间中的进程对于父空间是可见的。

  网络命名空间—有了 PID 命名空间 , 那么每个名字中的进程就可以相互隔离 , 但是 , 网络端口还是共享本地的端口 . 网络命名空间就是为进程提供一个完全独立的网络协议栈的视图,包括 : 网络设备接口 ,IPv4 和 IPv6 协议栈 ,IP 路由表 , 防火墙规则 ,sockets 等等。

目前容器所使用的命名空间提供5种不同的类型 :

(2)控制组功能 cgroups:

  控制组 (Control groups)--CGroups 是 Linux 内核的一个特性 ,主要用来对共享资源进行隔离、限制、审计等 。cgroups 允许对于进程或进程组公平 ( 不公平 ) 的分配 CPU 时间、内存分配和 I/O 带宽。

  容器通过 cgroups 来得到所能够管理资源的分配和使用。因此容器所获得资源仅为所有系统资源的一个部分。

Ÿ      资源限制 : 内存子系统为进程组设置内存使用上限,内存达到上限后再申请内存,就会发 出 Out of Memory

    优先级 : 通过优先级让一些组得到更多 CPU 等资源

Ÿ      资源审计 : 用来统计系统上实际把多少资源用到适合的目的上 , 可以使用 cpuacct 子系统记录某个进程组使用的 CPU 时间

Ÿ      隔离 : 为组隔离名字空间 , 这样一个组不会看到其他组的进程 .网络连接和文件系统

Ÿ      控制 : 挂起 . 恢复和启动等操作

Docker容器的简单使用的更多相关文章

  1. docker简单入门之使用docker容器部署简单的java web开源项目jpress博客程序

    一.在centos7.3上安装docker 前置条件 x86_64-bit 系统 kernel 3.10+ .检查内核版本,返回的值大于3.10即可 [root@node1 ~]# uname -r ...

  2. docker 容器简单使用

    文章目录 docker简介 docker容器简单使用 1.HelloWorld 2.运行交互式的容器 3.启动容器(后台模式) 安装docker容器的博文有很多这里就不做过多赘述了,另外如果不想安装d ...

  3. Docker 容器化部署1小时简单入门

    Docker简介 Docker是DotCloud开源的.可以将任何应用包装在Linux container中运行的工具.2013年3月发布首个版本,当前最新版本为1.3.Docker基于Go语言开发, ...

  4. Docker容器环境下ASP.NET Core Web API应用程序的调试

    本文主要介绍通过Visual Studio 2015 Tools for Docker – Preview插件,在Docker容器环境下,对ASP.NET Core Web API应用程序进行调试.在 ...

  5. 理解Docker(4):Docker 容器使用 cgroups 限制资源使用

    本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  6. 自定义Docker容器的 hostname

    自定义Docker容器的 hostname   作者: John Deng 原创内容,欢迎传播,请注明出处:http://www.cnblogs.com/johnd/p/set-docker-host ...

  7. 使用 Device Mapper来改变Docker容器的大小

    作者:Jérôme Petazzoni ( Docker 布道师) 译者:Mark Shao ( EMC 中国高级工程师) 如果在 CentOS . REHL . Fedor 或者其他默认没有 AUF ...

  8. 理解Docker容器的进程管理

    摘要: Docker在进程管理上有一些特殊之处,如果不注意这些细节中的魔鬼就会带来一些隐患.另外Docker鼓励"一个容器一个进程(one process per container)&qu ...

  9. Docker容器概念讲解

    Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源. Docker是通过内核虚 ...

随机推荐

  1. python总结五

    1.is和==的区别:官方文档解释:is表示的是对象标识符,而==表示的是相等equal,is的作用是用来检查对象的标识符是否一致,也就是两个对象在内存中的地址是否一样 而==是用来检查两个对象是否相 ...

  2. UDF——输出网格节点坐标

    需要在VS当中进行编译,具体内容可参看前面 <在Visual Studio中直接编译Fluent的UDF的总结(串行)> <在Visual Studio中直接编译Fluent的UDF ...

  3. spark listener

    最近在做一个需求,当spark程序在读数据或写数据时,将所读的条数或或所写的条数实时的展现出来,这里用到了SparkListener,sparklisten 可以获取spark 各个运行阶段的状态. ...

  4. Vue.js 自定义组件封装实录——基于现有控件的二次封装(以计时器为例)

    在本人着手开发一个考试系统的过程中,出现了如下一个需求:制作一个倒计时的控件显示在试卷页面上.本文所记录的就是这样的一个过程. 前期工作 对于这个需求,自然我想到的是有没有现成的组件可以直接使用(本着 ...

  5. Rancher 构建 CI/CD 自动化流程 - 动态配置 Jenkins-slave(二)

    一.说明 1.1 说明 前面介绍采用 Jenkinsfile + KubernetesPod.yaml 方式进行部署项目(Rancher 构建 CI/CD 自动化流程 - 动态配置 Jenkins-s ...

  6. 前端与算法 leetcode 36. 有效的数独

    目录 # 前端与算法 leetcode 36. 有效的数独 题目描述 概要 提示 解析 算法 传入[['5', '3', '.', '.', '7', '.', '.', '.', '.'],['6' ...

  7. Python3+syslog使用及相关说明

    一.说明 1.1 背景说明 syslog这个东西,最早接触是在Z公司做基线安全加固的时候有启用远程日志服务器一项,然后当时还写整理了一篇“rsyslog+loganalyzer远程日志系统搭建教程(C ...

  8. docker compose 编排

    Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景. 说明:Comp ...

  9. ubuntu18 docker中部署ELK

    ELK是ElasticSearch.Logstash.Kibana的简称,一般用于日志系统,从日志收集,日志转储,日志展示等入手,用以提供简洁高效的日志处理机制. 鉴于没有额外的机器,这里就用dock ...

  10. SQL系列(十)—— 联结(join)

    在数据库设计中,基本上都是根实体ER关系和范式设计多张表.这样更能设计出更合理.紧凑的表结构,提高有效数据存储,数据的管理维护更简便,也提高了库表的伸缩性. 但是事物总是平衡的,在很多场景中单张表的数 ...