【Docker】docker入门

前言:

     立个flag:希望过节这两天把这本书看完,掌握docker!!加油

正文:

    Linux:内核启动、挂载root文件系统提供用户空间支持

    Docker镜像Image,相当于root文件系统、提供容器运行时所需的程序、库、资源、配置文件、为运行时准备的配置参数(环境变量、用户、匿名卷等),不包含动态数据

Docker:

架构图:

希望看完这篇博客,大家能看懂这幅图,其实吧我就是上传镇一下博客


利用UnionFS技术、分层存储:

1、镜像是虚拟的概念、由一组(多层)文件系统组成,构建时一层层构建,完不会再改,互不影响:删除假删除

2、镜像的复用、定制更容易,可以用之前的进一步添加、定制自己的内容、构建新镜像

容器相关概念:

1、镜像Image和容器Container:类和实例,镜像是静态、容器是运行时的实体,实质是进程,运行在属于自己的独立的命名空间(隔离环境、安全)

2、容器可以被创建、启动、停止、删除、暂停等;运行时以镜像为基础层、其上创建当前容器的存储层(为运行时读写准备,生命周期同容器)

      docker容器可以理解为在沙盒中运行的进程。沙盒包含了该进程运行所必须的资源,包括文件系统、系统类库、shell 环境等等。沙盒默认不会运行任何程序,需要在沙盒中运行一个进程来启动某一个容器,这个进程是该容器的唯一进程,所以当该进程结束的时候,容器也会完全的停止。【源】

3、容器不应该向其存储层(无状态)写入任何数据,写入操作应使用数据卷或绑定宿主目录,在这些位置上的读写会跳过容器存储层,对宿主、网络存储读写,性能稳定性更高

4、数据卷:生命周期独立于容器

5、主机Host:物理或虚拟的机器,用于执行Docker守护进程和容器

6、仓库Registry:保存镜像,Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合

7、Machine:简化Docker安装的命令行工具,如VirtualBox、 Digital Ocean、Microsoft Azure

Docker Registry:集中存储、分发镜像的服务,可包含多个标签,一个标签一个镜像

1、仓库:一个仓库会包含同一个软件不同版本的镜像

    1.1仓库名:两段式路径:DockerRegistry多用户环境下的用户名/软件名:jwilder/nginx-proxy,不绝对、取决于Docker Registery软件或服务

2、标签:对应软件的各个版本,默认latest

3、通过<仓库名>:<标签>指定具体镜像:ubuntu:14:04

4、公开服务:开放给用户使用、容许用户管理的registry服务:免费上传、下载公开镜像

5、私有Docker Registry

安装:

1、介绍:Docker系统有两个程序:docker服务端和docker客户端。

1.1服务端是一个服务进程,管理着所有的容器。

1.2客户端是服务端的远程控制器,用来控制docker的服务端进程。

1.3大部分情况下,docker服务端和客户端运行在一台机器上。【源】

安装前进行环境配置:修改docke的配置文件/usr/lib/systemd/system/docker.service,修改不是添加

ExecStart=/usr/bin/dockerd --insecure-registry=sz-pg-oam-docker-hub-001.tendcloud.com -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

修改之后

systemctl daemon-reload
systemctl restart docker

基本命令:命令行中

*、运行:service docker start,重启docker restart *、停止docker stop *

*、命令使用方法列表:docker command --help查询详细的使用情况,如下面的官方解释

Run 'docker COMMAND --help' for more information on a command

*、docker run 命令来在容器内运行一个应用程序,运行即进入容器

 docker run ubuntu:15.10 /bin/echo "Hello world"
docker二进制执行文件;run运行;ubuntu:15.10要运行的镜像;/bin/echo "Hello world”容器中执行的命令

 docker run -i -t  ubuntu:15.10 /bin/bash

-i:容许对容器内的标准输入STDIN进行交互 ; -t:在新容器中指定伪终端或终端

还可以用-d 后台运行,-P将容器内部使用的网络端口号映射到使用的主机上;-p 5000:5000指定端口

0.0.0.0:32769->5000/tcp:Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32769 上,访问32769

镜像

1、搜索镜像:docker search 镜像名字 ,或找Docker Hub

2、下载容器镜像:docker pull ***,移除docker rm *,查看镜像列表:docker images

3、更新镜像:

3.1创建docker run -t -i 镜像 命令

3.2apt-get update更新、exit退出容器、commit提交容器副本

docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2

-m:提交的描述信息;-a:指定镜像作者;e218edb10161:容器ID;runoob/ubuntu:v2:指定要创建的目标镜像名

4、构建镜像:docker build

4.1cat Dockerfile创建Dockerfile文件(一组指令告诉docker如何构建),指令:

FROM,指定使用哪个镜像源

RUN 指令告诉docker 在镜像内执行命令,安装了什么等

4.2docker build -t runoob/centos:6.7 .

-t :指定要创建的目标镜像名

. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

问题:

1、docker容器中运行hello world的时候报错:

Error response from daemon: shim error: docker-runc not installed on system 

解决方案:

cd /usr/libexec/docker/
sudo ln -s docker-runc-current docker-runc

swarm:集群管理工具


外部用户通过HTTP接口笼统地向集群发出指令,swarm会自动地做一些如负载均衡,保持容器副本数量、伸缩等工作(根据和k8s很像)【源】我修改了docker.service文件,docker起不来了,不清楚是什么原因,以后研究吧

小结:

看菜鸟教程感觉吧不是很复杂,Docker不错的技术

命令大全             资源汇总   指南文档   文档02

http://www.runoob.com/docker/docker-container-connection.html

猜你喜欢

转载自blog.csdn.net/ma15732625261/article/details/80144829
今日推荐