Docker入门——1 (什么是docker、命令、镜像、仓库)

 

他是一个容器

Docker可以帮助用户构建和部署容器,用户值需要把自己的应用程序或者服务打包放进容器即可。

容器是基于镜像启动的,容器中可以运行一个或多个进程。我们可以认为,镜像是Docker生命周期中的构建或打包阶段,而容器则是启动或执行阶段

总结起来,docker容器就是:

  1. 一个镜像格式
  2. 一系列标准操作
  3. 一个执行环境

Docker资源

 

安装docker

Linux(ContOs)安装

  1. 使用命令 uname -a  确认内核是否是3.8以上版本
  2. 使用命令sudo grep device-mapper /proc/devices 或ls -l /sys/class/misc/device-mapper/   检查是否有Device Mapper(作为docker的存储驱动,为docker提供存储能力)
  3. vi /etc/sysconfig/selinux  将selinuxg改为disabled  SELINUX=disabled
  4. yum install -y docker  下载docker
  5. systemctl start docker  contos7启动docker
  6. 如果失败报: Error starting daemon: SELinux is not supported with the overlay2 graph driver on ...=false),两个解决方案:
    1. 启动新的内核
    2. docker配置文件里面里禁用selinux,--selinux-enabled=false
       vim /etc/sysconfig/docker
  7. docker info  查看docker是否启动
  8. 将docker守护进程绑定到宿主机上的网络接口,直接设置DOCKER_HOME环境变量来达到永久有效的方式:export DOCKER_HOST="tcp://0.0.0.0:2375"
  9. 检测守护进程是否启动,如果没启动会报没有运行的错误,下列表格为启动的效果

[root@node129 ~]# service docker stop

Redirecting to /bin/systemctl stop  docker.service

[root@node129 ~]# service docker start

Redirecting to /bin/systemctl start  docker.service

Windows安装

自动安装

  1. 首先要确定安装了curl命令,如果没装,执行 yum -y install curl
  2. 执行命令:curl https://get.docker.com/ | sudo sh

Docker入门

在进行操作前一定要确认docker程序已运行,功能是否正常,执行命令:docker info

该命令会返回所有容器和镜像的数量,Docker使用执行驱动和存储驱动以及Docker的基本配置。

而docker是基于客户端-服务器的架构,它有一个docker程序,既能作为客户端也能作为服务器端。作为客户端时,docker程序向Docker守护进程发送请求,然后在对返回的请求结果做处理。

 

 

创建一个容器

  1. docker run -i -t ubuntu /bin/bash 创建一个ubuntu容器(重官方提供的版本中拉取)

其中  /bin/bash命令启动了一个Bash shell,下列图就是用root用户登录到a5312w03eafc容器中。这是一个完整的ubuntu系统

简单概述一下创建容器的全过程

首先docker会查询本地是否存在ubuntu镜像,如果没有就去我们配置的镜像网址去找(默认是Docker Hub官网上的地址),找到后会下载到本地宿主机中,随后,Docker在文件系统内部用这个镜像创建了一个新的容器。该容器拥有自己的网络、IP地址,以及一个用来和宿主机进行通信的桥接网络接口,最后我们就可以使用这个容器了。

 

使用容器

简易操作,及命令安装等

我们现在使用a5312w03eafc容器(ubuntu)中root用户对他进行操作

所有命令跟该操作系统一致

hostname   查看主机名

查看hosts配置文件,下列图中明显可以看出来自动给他配了一个ip地址172.17.0.2

之后会发现docker提供的这个镜像是真的难用,里面大部分命令都没有,比如ip、vim等,执行以下命令

apt-get update 更新

apt-get install vim -y vim文本编辑器

apt-get install net-tools ifconfig和ping命令

安装完成后,检查网络配置,如下图,这里有lo的环回接口,有一个172.17.0.2的标准eth0网络接口,和普通的宿主机一模一样

检查容器进程

关闭容器

输入exit返回宿主机时,容器已经停止运行了!只有在指定的/bin/bash命令处于运行状态的时候,我们的容器才会运行。一旦退出,/bin/bash命令也就结束了,这时容器也随之停止运行,但是容器还是存在的。运行docker ps -a查看容器列表

修改容器名称

docker rename confident_brahmagupta dyc_docker_test

 

启动关闭的容器

docker start dyc_docker_test    通过容器名启动

docker start a5312e03eafc 通过ID启动

docker stop dyc_docker_test 通过容器名关闭

docker stop a5312e03eafc 通过ID关闭

附着到正在运行的容器上

docker attach dyc_docker_test

当容器重新启动时,会沿用docker run命令时指定的参数,因此我们的容器重新启动后会运行一个交互式会话shell,此外,也可以用docker attach 命令,重新附着到该容器会话上

 

创建守护式容器

上面介绍的是交互式运行的容器,也可以创建长期运行的容器。守护式容器,没有交互式会话,非常适合运行应用程序和服务。大多数时候我们都需要以守护式来运行我们的容器

docker run --name dyc_docker_sh -d ubuntu /bin/sh -c "while true;do echo hello world;sleep 1;done"

-d 的意思是后台运行,在这里使用了脚本语言循环去输出“hello world”,而且这边没有将主机的控制台附着到新的容器中,先查看在运行的容器 docker ps(没有加a的参数就只显示正在运行的容器)

容器日志

docker logs dyc_docker_sh     显示最新的log

docker logs -f dyc_docker_sh 跟踪守护式容器log

docker logs -ft dyc_docker_sh 跟踪守护式容器log加上了时间

 

还可以在创建的时候使用日志驱动,但这个时候在使用docker log就打印不出来日志了,日志已经全部重定向到Syslog中,如:

docker run --log-driver --name dyc_docker_sh -d ubuntu /bin/sh -c "while true;do echo hello world;sleep 1;done"

           如果是在Docker Toolbox中运行Docker,应该在虚拟机中启动Syslog守护进程

查看容器内进程

docker top dyc_docker_sh

 

docker统计信息

 

 如果你想在守护式中使用交互命令就必须使用以下命令,-t -i表示我们执行的进程创建了TTY并捕捉STDIN,注意使用交互命令时用exit退出该容器也继续在运行,不会退出,守护式容器只能使用docker stop dyc_docker_sh停止,整体流程如第二幅图:

docker exec -t -i dyc_docker_sh /bin/bash

 

容器自动重启

docker run --restart=always --name dyc_docker_sh -d ubuntu /bin/sh -c "while true;do echo hello world;sleep 1;done"

--restart=always     无论退出代码是什么都会重启

--restart=on-failure:5 错误代码为非0时重启,且重启次数最多为5次

 

获取容器信息的不且是 docker ps还可以使用docker inspect dyc_docker_sh来获取更为信息的信息

 

简单的对docker容器进行部署、操作以及基本的工作原理演示

 

使用Docker的镜像和仓库

什么是docker镜像

Docker镜像是由文件系统叠加而成的,最低端是一个引导文件系统(bootfs),但是我们几乎不会跟引导文件打交道,当一个容器启动后,它会被移到内存中,而引导文件则会被卸载。

第二层是root文件系统(rootfs),它位于引导文件系统之上,rootfs可以是一种或多种的操作系统,在传统的Linux系统中root文件系统最先以只读的方式加载,等引导结束并且检查完毕后,才改成可读写模式,而在docker中,root文件系统只能是只读状态,并且在利用联合加载技术,在root文件系统层上加载更多的只读系统文件。联合加载指的是一次同时加载多个文件系统,但是外面看起来只能看到一个文件系统,联合加载会将各层文件系统叠加在一起,这样最终的文件系统会包含所有底层的文件和目录。

Docker将这样的文件系统称为镜像。一个镜像可以放到另一个镜像的顶部, 位于下面的镜像称之为父镜像。依次类推,直到镜像栈的最底部,最底部的镜像称为基础镜像。最后,当一个容器启动时,docker会在该镜像的最顶层加载一个读写文件系统。我们想在docker中运行的程序就是在这个读写层中执行的。

 

列出镜像

本地镜像都保存在Docker宿主机的 /var/lib/docker目录下,镜像是从仓库下载的,仓库位于Registry中。默认的Registry是在Docker提供运营的Docker Hub上

获取所有镜像列表:docker images

目前只有一个,我们在拉取一个Ubuntu 18.10镜像

 

查看镜像

  1. 直接从docker hub上查询
  2. 使用docker命令:docker search ubuntu

构建镜像

  1. 首先需要去docker gub上面注册一个账号,
  2. 注册完成后在linux上输入命令: sudo docker login
  3. 按提示输入之前注册好的账号密码,在这里可能会出现Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?  错误,该错误是因为我们设置的dns有问题,请把他配置成8.8.8.8(谷歌),登陆成功,如下图

他会把用户的个人信息保存到~/.docker/config.json中

 

使用commit构建新镜像

  1. sudo docker run -i -t ubuntu /bin/bash  拉取或进入镜像中
  2. 为这个镜像安装apache2    apt-get -yqq update   apt-get -y install apache2
  3. 构造一个新的镜像
    1. sudo docker commit ef6b519b1fe3 ubuntu_dyc/apache2   ( docker ps -l -q  可以查到刚刚使用的镜像ID)
    2. sudo docker images ubuntu_dyc/apache2   查看新构建的镜像

 

使用Dockerfile构建镜像

     在这里并不推举使用commit构建镜像,推举使用dockerfile的定义文件和docker build命令来构建镜像,他比commit构建镜像更具备可复制性、透明性及冥等特性

 使用dockerfile的步骤:

  1. 创建一个存放Dockerfile的文件夹,并编写Dockerfile文件
    1. mkdir static_web
    2. cd static_web
    3. touch Dockerfile
    4. vim Dockerfile

FROM ubuntu:14.04

MAINTAINER dyc "919325340@qq.com"

RUN apt-get update && apt-get install -y nginx

RUN echo 'Hi, I am in your container' > /usr/share/nginx/html/index.html

EXPOSE 80

 

  1. docker build -t dyc/static_web:v1 .   

执行build命令时,Dockerfile中所有的指令都会被提交,并且在该命令成功结束后返回一个新镜像,其中dyc为仓库名static_web镜像名v1是标签    请注意上面的命令  dyc.static_web 后面还有一个点.  这个代表他执行的位置,.代表当前目录

 

  1. 查看镜像是否存在

 

 

问题总结

1.

 

  1. docker对contos7的兼容度不够,初始contos的内核是3.10版本,必须进行升级,升级后,内核为:CentOS Linux release 7.6.1810 (Core)
  1. yum clean all
  2. Yum update

 

命令收集

service docker start

开启服务

service docker stop

关系服务

docker info

查看docker基本信息

docker version

查看版本号

docker run -i -t ubuntu /bin/bash

创建新容器

docker image ls

查看镜像文件

Docker rmi -f 镜像ID

删除镜像

docker rm  容器名

删除容器

docker container ls

列出hello-world在显示其消息后退出的容器(由图像生成)

docker ps -a

查看容器列表

docker run --name xxx -i -t ubuntu /bin/bash

创建一个名称为xxx的容器,如果未加命名,则用容器ID代替

docker rename 原容器名 新容器名

修改容器名称

docker start 容器名(ID名)

启动容器

docker stop 容器名(ID名)

关闭容器

docker attach dyc_docker_test

交互式容器如果启动后,附着到正在运行的容器上

docker run --name dyc_docker_sh -d ubuntu /bin/sh -c "while true;do echo hello world;sleep 1;done"

创建守护式容器  -d为后台运行的意思

docker logs dyc_docker_sh    

docker logs -f dyc_docker_sh

docker logs -ft dyc_docker_sh

 

显示最新的log

跟踪守护式容器log

跟踪守护式容器log加上了时间

 

docker run --log-driver --name dyc_docker_sh -d ubuntu /bin/sh -c "while true;do echo hello world;sleep 1;done"

启用日志驱动,使日志重定向到Syslog中去,在使用docker logs 命令将差不到日志

docker pull fedora:20

 

sudo docker login

登陆docker账号,如果没有创建,请到docker gub上注册

Sudo docker commit 镜像ID ubuntu_dyc/apa

Commit方式构建新镜像

sudo docker build -t dyc/static_web:v1 .  

首先创建Dockerfile文件,并编辑该文件之后

使用Dockerfile创建镜像,后面的点是相对路径

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值