Docker

 安装

在windows下安装docker 的前提可能是要先安装 Hyper-V 虚拟机, 

因为 Docker 就是运行在 Hyper-V 虚拟机上的

 

本地项目

新建一个项目

编译发布

在发布的目录中新增一个 DockerFile

 

 

 

 

命令: (版本18.03.1)

 

查找一个镜像

docker search xxxxxx

镜像都是按照 用户名/ 镜像名的方式来存储的。有一组比较特殊的镜像,比如ubuntu这类基础镜像,经过官方的验证,值得信任,可以直接用 镜像名来检索到。

 

下载一个镜像

docker pull xxxxxx:<tag>

下载使用 pull 命令, 要写完整的名字, 比如 xxxx/yyyy

此命令默认下载 latest版本 

如果要下载某个版本的话

可以先去 hub.docker.com 按照镜像名来查找

 

运行 hello World

docker run learn/tutorial echo "helllo world"

 

安装命令

$docker run learn/tutorial apt-get install -y ping

看明白了吗?. run 命令是基于选择某一个镜像来执行的

这里的 tutorial  其实指的是 ubuntu 操作系统

所以 docker run learn/tutorial 之后的命令就相当于在 这个 ubuntu 上操作命令行一样了 

备注:apt-get 命令执行完毕之后,容器就会停止,但对容器的改动不会丢失。

提示:

在执行apt-get 命令的时候,要带上-y参数。如果不指定-y参数的话,apt-get命令会进入交互模式,需要用户输入命令来进行确认,但在docker环境中是无法响应这种交互的。

 

保存修改

docker ps -l
docker commit 698 learn/ping

当你对某一个容器做了修改之后(通过在容器中运行某一个命令),可以把对容器的修改保存下来,这样下次可以从保存后的最新状态运行该容器。

docker中保存状态的过程称之为committing,它保存的新旧状态之间的区别,从而产生一个新的版本

首先使用docker ps -l命令获得安装完ping命令之后容器的id。然后把这个镜像保存为 learn/ping(这个learn/ping是新的镜像名字)。

提示:

1. 运行docker commit,可以查看该命令的参数列表。

2. 你需要指定要提交保存容器的ID。(译者按:通过docker ps -l 命令获得)

3. 无需拷贝完整的id,通常来讲最开始的三至四个字母即可区分。(译者按:非常类似git里面的版本号)

4. 执行完docker commit命令之后,会返回新版本镜像的id号。

 

运行新的镜像

docker run lean/ping ping www.baidu.com

一定要使用新的镜像名learn/ping来运行ping命令。(译者按:最开始下载的learn/tutorial镜像中是没有ping命令的)

 

检查运行中的镜像

docker inspect xxx

 

docker ps命令可以查看所有正在运行中的容器列表,使用docker inspect命令我们可以查看更详细的关于某一个容器的信息。

 

发布自己的镜像

docker images
docker login <远程仓库地址>:<Tag> docker push learn
/ping

1. docker images命令可以列出所有安装过的镜像。

2. docker push命令可以将某一个镜像发布到官方网站。

3. 你只能将镜像发布到自己的空间下面。这个模拟器登录的是learn帐号。

 

镜像是一系列只读层的顶层视角

容器是镜像再加一个可读写层的视角

容器相当于我们运行了一个镜像一样, 然后输入了些命令

每个命令会产生一个新的容器, 每个都是相当于个时间分支一样

然后我们可以选择其中一个然后保存为新的镜像

下面是一些简单的docker的命令 :
  1.docker rm (容器名称或容器ID)   删除docker单个容器
  2.docker rm $(docker ps -a -q)           删除docker所有容器
  3.docker ps -a                                     查看所有容器信息
  4.docker images                                 查看所有镜像信息
  5.docker stop (容器名称或容器ID) 停止某个容器运行
  6.docker kill (容器名称或容器ID)    杀死某个容器
  7.docker start (容器名称或容器ID) 启动某个容器
  8.docker rmi (镜像名称或镜像ID)        删除某个镜像
  9.docker pull (镜像名称)                 下载镜像
       10. docker pull registry.docker-cn.com/myname/myrepo:mytag     选择仓库进行下载镜像
   

 

打包, 根据 Dockerfile 创建一个镜像

docker build -t mydockerimages .

参数 -t 指定镜像的名字

比如说这里叫 mydockeriamges

还可以使用参数 -f 来显式的指定 dockerfile 的位置, 如果不使用则为当前目录

执行了这条命令后,  docker 会将该上下文目录中(此处就是指命令的 . 也就是当前目录)的文件根据 Dockerfile 打包成镜像

然后传给Docker daemon

 

其中的 Dockerfile

FROM microsoft/dotnet:2.0-sdk
WORKDIR myCore
COPY . .
EXPOSE 20010
ENV ASPNETCORE_URLS http://192.168.0.76*:20010
ENTRYPOINT ["dotnet", "ForDocker1.dll"]

FROM:

就是基于某个镜像构建这个包

WORKDIR

工作目录, 如果不存在的话 docker 会自动创建

COPY<源路径> <目标路径>

指令将从构建上下文目录中 <源路径> 的文件或目录复制到新的一层的镜像内的 <目标路径> 位置。

<源路径>所指定的源必须在上下文目录中,即必须是上下文根目录的相对路径!

<目标路径> 可以是容器内的绝对路径,也可以是容器内相对于工作目录的相对路径( 工作目录可以用 WORKDIR指令来指定)。

目标路径不需要事先创建,如果目录不存在会在复制文件前先行创建目录。

这个目标路径是相对于 WORKDIR 的目录来定的

如果目标路径是 x 的话, WORKDIR是 y 的话 那么生成的路径是 /y/x

EXPOSE:

指定 docker run 的端口, 这里指定了20010 的话, 那么 docker run 之后的端口也会是20010 (指docker容器内部的端口)

ENV ASPNETCORE_URLS:

目前没搞明白是干嘛用的, 但是这里指定了 ip 的话, 可以在主机环境下用 ip 来访问

ENTRYPOINT

要指定运行时候的命令

ADD<源路径><目标路径>

ADD与COPY指令在功能上十分相似,但是在COPY的基础上增加了一些功能。

比如,源路径可以是一个指向一个网络文件的URL,这种情况下,Docker引擎会试图下载这个URL指向的文件到<目标路径>去。

此外,当<源路径>为一个tar压缩文件时,该压缩文件在被复制到容器中时会被解压提取。但是使用COPY指令只会将tar压缩文件拷贝到<目标路径>中

 

运行

docker run [参数] [镜像名]

-it: 交互模式, 可以进入到容器的内部

-p <目标端口>:<原始端口>: 设置内外端口的映射  原始端口就是内部的端口

这里要注意的是

直接 run 的话

Dockerfile 里的 ENTRYPOINT 运行命令是针对工作目录来说的

如果COPY还有一层目录的话, 相当于是 工作目录/COPY到的目录 2层目录

 

 

 

Docker 命令集
     寻找网络镜像命令
         docker search centos
             
             [root@test ~]# docker search centos
                         名字                                             描述                                             下载次数  是否官方   是否是Dockerfile构建的 
             INDEX       NAME                                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMAT
             docker.io   docker.io/centos                                 The official build of CentOS.                   3301      [OK]       
 
     下载镜像
         docker pull centos
     查看镜像
         docker images
     删除镜像
         docker rmi
     
 容器命令
     启动容器
         docker run --name -h hostname
     启动容器2
         docker start CONTAINER ID
     停止容器
         docker stop CONTAINER ID
     查看容器
         docker ps -a 
     进入容器
         docker exec | docker attach
     删除容器
         docker rm
 
 进入后台运行容器
     docker attach 68e5c66ee5c9        退出自动停止运行容器
 
 进入容器
     docker run --name mydocker -it docker.io/centos /bin/bash
         -d        进入后台运行
         --run    运行
         --name 指定名字
         -i        输入终端打开
         -t        开一个伪终端
         
 进入容器不退出
 1、进入容器
     docker run --name mydocker -it docker.io/centos /bin/bash
 2、退出
 3、启动容器
     docker ps -a查询ID号
     docker start ID号
 4、获取Pid号
     docker inspect --format "{{.State.Pid}}" 68e5c66ee5c9
 5、进入容器而不退出
     nsenter --target 19205 --mount --uts --ipc --net --pid    退出不停止运行容器
     如果没有这个命令,需要安装util-linux包    nsenter
 
 6、懒人写法
     nsenter --target `docker inspect --format "{{.State.Pid}}" ID` --mount --uts --ipc --net --pid    
 docker 网络访问
     docker run -P 
         -P    随机映射
         -p    hostport:containerPort
         -p    ip:hostPort:containerPort
         -p  ip::containerPort
         -p  hostPort:containerPort
         -p  hostPort:containerPort
         
 数据卷管理
     docker 
         -v /data
         -v /src:/dsrc
         -v /src:/src:ro 
 
 容器的制作
     docker commit -m "my nginx" f443e801f545 shijia/my-nginx:v1
 Docker file 的方式构建docker镜像
     
     FROM         他的妈妈是谁(基础镜像)
     MAINTAINER    告诉被人,你创造了他(维护者信息)
     RUN            你想让他干啥(把命令前面加上RUN)
     ADD         相当于cp命令(COPY文件,会自动解压)
     WORKDIR        相当于cd命令(当前工作目录)
     VOLUME        给我一个放行李的地方(目录挂载)
     EXPOSE        我要打开的门是啥(端口)
     RUN            奔跑吧,兄弟!(进程要一直运行下去)
     
     Docker 案例
     vim /opt/docker-file/nginx/Dockerfile
     
     # This is My first Dockerfile
     # Version 1.0
     # Author : Shijia Zhang
 
     #Base images
     FROM centos
 
     #MAINTAINER
     MAINTAINER ShiJia Zhang
 
     #ADD
     ADD pcre-8.37.tar.gz    /usr/local/src
     ADD nginx-1.9.3.tar.gz  /usr/local/src
 
     #RUN
     RUN yum -y install wget gcc gcc-c++ make openssl-devel
     RUN useradd -s /sbin/nologin -M www
 
     #WORKDIR
     WORKDIR /usr/local/src/nginx-1.9.3
 
     #RUN
     RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-pcre=/usr/local/src/pcre-8.37 && make && make install
 
     RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
 
     ENV PATH=/usr/local/nginx/sbin:$PATH
     EXPOSE 80
 
     CMD ["nginx"]
 运行Dockerfile
     docker build -t nginx-file:v1 /opt/docker-file/nginx/
 其他命令
     docker run -it --rm stree --cpu 1
     --rm    容器运行完即可删除
     --cpu    指定分多少颗CPU

 

 

 

修改仓库 

linux 上更改仓库

修改:/etc/docker/daemon.json增加如下内容

{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}

windows 上更改仓库

 

posted @ 2017-11-24 15:32  `Laimic  阅读(173)  评论(0)    收藏  举报