Docker入门命令详解

目录

 

一、Docker 简介

1、Docker引擎

2、Docker客户端

3、Docker镜像

4、Docker容器

5、Docker镜像注册中心

二、Docker的特点

1.快速运行。

2.节省资源

3.便于交付

4.容易管理

三、Docker安装

1.更新yum

2.添加yum的docker包仓库

3.安装Docker引擎

4.启动Docker引擎服务

5.列出镜像

6.拉取镜像

7.搜索镜像

8.导入导出镜像

四、Dockers常用操作

1.创建并启动容器

2.列出容器

3.进入容器

4.向运行中的容器执行命令

5.停止容器

6.终止容器

7.启动容器

8.重启容器

9.删除容器

10.删除镜像

11.导入导出容器

12.Docker指令汇总

五、制作Java镜像

1.下载JDK8

2.复制JDK8到主目录的software文件夹下

3.启动容器

4.提交镜像

5.验证镜像

六、使用Dokcerfile构建镜像

1. Dockerfile结构

2.使用Dockerfile构建镜像

3.Dockerfile指令汇总

七、使用DockerRegistry管理镜像

1.使用DockerHub

2.搭建Docker Registry

八、Tips

1. 调整Docker内存限制


一、Docker 简介

1、Docker引擎

       可以理解为一个运行在服务器上的后台进程,也成为Docker Daemon 或Docker服务。它本质上是一个服务,只要启动该服务,就能随时使用它。我们可以通过Docker命令客户端发送相关Docker命令,并于Docker引擎进行通信。

2、Docker客户端

       Docker客户端有两种:一种是Docker命令客户端,一种是REST API。

3、Docker镜像

       Docker镜像就像我们使用的光盘,引擎就像光驱。把镜像载入到引擎中就可以使用镜像中的应用程序。一般情况下我们需要先将程序打包到Docker镜像中,随后才能将镜像交给其他人使用。

4、Docker容器

       当我们获取到一个Docker 镜像后,可随时运行该Docker镜像,此时便会启动一个Docker容器,该容器中将运行镜像中封装的程序。如果将Docker镜像比作类的话,容器就相当于类创建的实例,一个Docker镜像理论上可以运行无数个Docker容器。

5、Docker镜像注册中心

       Docker官方提供了一个叫DockerHub的镜像注册中心用于存放公有和私有镜像。https://hub.docker.com/

二、Docker的特点

1.快速运行。

启动虚拟机要几分钟,启动Docker仅需几秒

2.节省资源

Docker容器运行在Docker引擎上,共享宿主硬件资源,虚拟机则需要虚拟出很多太硬件。

3.便于交付

传统的软件交付物是程序,而Docker交付的是镜像,镜像不仅封装了应用程序,而且还包含了运行程序所需的相关环境。

4.容易管理

Docker可以很方便的结成protainer等可视化管理工具,很方便的查看镜像、容器。也可以通过命令客户端查看容器、镜像的状态。

三、Docker安装

1.更新yum

yum update

2.添加yum的docker包仓库

tee[逸虚凌辰1]  /etc/yum.repos.d/docker.repo <<-'EOF' 

[dockerrepo]

 

name=Docker Repository

 

baseurl=https://yum.dockerproject.org/repo/main/centos/7/

 

enabled=1

 

gpgcheck=1

 

gpgkey=https://yum.dockerproject.org/gpg

 

EOF

3.安装Docker引擎

yum install docker-engine

4.启动Docker引擎服务

service docker start

5.列出镜像

docker images

6.拉取镜像

docker pull centos

7.搜索镜像

docker search centos

8.导入导出镜像

docker save centos > centos.tar

docker load < centos.tar

四、Dockers常用操作

1.创建并启动容器

docker run -i [逸虚凌辰2] -t[逸虚凌辰3]  centos [逸虚凌辰4] /bin/bash[逸虚凌辰5] 

2.列出容器

docker ps

docker ps -a查看所有容器,

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES

79df7cba5557        centos              "/bin/bash"         4 minutes ago       Exited (0) 3 minutes ago                       adoring_turing

3.进入容器

docker attach 79df7cba5557

进入运行中的容器

4.向运行中的容器执行命令

docker exec 79df7cba5557 -i -t ls -l[逸虚凌辰6] 

5.停止容器

docker stop 79df7cba5557

6.终止容器

docker kill 79df7cba5557

7.启动容器

docker start 79df7cba5557

8.重启容器

docker restart 79df7cba5557

9.删除容器

docker rm 79df7cba5557

这个命令只能删除已经停止的容器

docker rm -f 79df7cba5557

强制删除运行中的程序

docker rm -f ‘docker ps -a -q’

批量强制删除所有容器

10.删除镜像

docker rmi -f centos

docker rmi  [镜像id]

强制删除所有镜像

docker rmi -f ‘docker images -a -q’

11.导入导出容器

docker export 79df7cba5557 < centos.tar

docker import foo.tar huangyong/centos:latest

12.Docker指令汇总

Docke 命令

描述

attach

进入一个运行中的容器

build

从Dockerfile中构建镜像(自动构建镜像)

commit

从容器变更中构建镜像(手工制作镜像)

cp

在容器和本地之间复制文件或者目录

create

创建一个新容器(但不启动容器)

diff

查看容器文件系统的变更情况

events

从服务器上获取实时事件

exec

在运行中的容器执行一条命令

export

将容器导出未tar文件

history

显示镜像历史

images

列出镜像

info

显示docker引擎的基本信息

inspect

获取容器与镜像的基本信息

kill

终止一个运行中的容器

load

从镜像tar文件中导入镜像

login

登陆Docker Registry

loginout

注销Docker Reginstry

logs

获取容器的日志信息

network

管理docker网络

pause

暂停容器中所有进程

port

获取容器的端口映射信息

ps

列出容器

pull

从docker Registry中拉取镜像

push

推送镜像到Docker Registry中

rename

从新命名容器

restart

重启容器

rm

删除一个或者多个容器

rmi

删除一个或者多个镜像

run

在新容器中运行一条命令(启动容器)

save

将镜像导出未为tar文件

search

搜索镜像

start

启动一个或者多个已停止的容器

stats

获取容器的资源使用信息

stop

停止一个运行中的容器

tag

为镜像打标签

top

获取容器的进程活动信息

unpause

回复容器中的所有进程

update

更新一个或者多个容器的配置信息

version

显示docker的版本

volume

管理容器数据卷

wait

等待容器停止,随后可输入退出

五、制作Java镜像

1.下载JDK8

2.复制JDK8到主目录的software文件夹下

3.启动容器

docker run -i -t -v[逸虚凌辰7]  /software:/mnt/software centos /bin/bash

此时进入容器中,会在mnt/software中发现我们复制的JDK

解压JDK,安装到/opt目录下

tar -zxf [逸虚凌辰8] /mnt/software/jdk-8u191-linux-x64.tar.gz -C/opt

建立jdk快捷方式

ln -s [逸虚凌辰9] /opt/jdk1.8.0_191 /opt/jdk

ll /opt/jdk

验证jdk版本

/opt/jdk/bin/java -version

4.提交镜像

另外打开一个终端,查看当前容器。

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

583c6bbdf18e        centos              "/bin/bash"         19 minutes ago      Up 19 minutes                           optimistic_chandrasekhar

docker commit 583c6bbdf18e prim/java

然后查看镜像就会看到我们生成的镜像。

5.验证镜像

docker run --rm[逸虚凌辰10]  prim/java /opt/jdk/bin/java -version

六、使用Dokcerfile构建镜像

1. Dockerfile结构

Dockerfile是编写Docker镜像的脚本

  1. 设置基础镜像
    FROM:centos:latest
    FROM指令的固有格式“仓库名:标签名”
  2. 设置维护者信息
    可以指定镜像由谁创建的,由谁维护的
    MAINTAINER “Yang Rui”[email protected]
  3. 设置需要添加到容器中的文件
    ADD jdk-8u91-linux-x64.tar.gz /opt
    ADD指令的第一个参数为宿主机的来源地址(可使用相对路径)第二个是容器的目标路径(必须为绝对路径)使用ADD命令,将自动解压来源路径中的压缩包,将解压后的文件复制到目标路径中。一般将Dockerfile文件和需要添加到容器的文件放在同一目录,有助于编写路径来源。
  4. 设置镜像制作过程中执行的命令
    例如创建链接
    RUN ln -s /opt/jdk1.8.0_91 /opt/jdk
    如果要使用多条命令可以写多条RUN。但是可以将多条命令通过\命令换行符合并成一条,可以减少镜像的体积。原因是镜像每执行一条命令就会形成新的“镜像层”
  5. 设置容器启动时所需要执行的命令
    我们使用docker run是,可以在命令的最后一段添加一个容器启动时需要执行的命令,在Dockerfile中也有对应的CMD指令。
    CMD /opt/jdk/binjava -version
    如果我们在docker run命令是指定了需要执行的命令,那么该命令将覆盖Dockerfile中的CMD命令。
    Dockerfile中还有一个与CMD指令类似的ENTRYPOINT指令,它不能被覆盖。
    CMD指令要么没有,要么只有一条。

2.使用Dockerfile构建镜像

进入到jdk所在的目录,然后构建Dockerfile文件

cd /software

touch [逸虚凌辰11] Dockerfile

vim Dockerfile

添加如下构建文件

FROM centos:latest

MAINTAINER "Yang Rui"<[email protected]>

ADD /software/jdk-8u191-linux-x64.tar.gz /opt

RUN ln -s /opt/jdk1.8.0_91 /opt/jdk

CMD /opt/jdk/bin/java -version

然后执行构建镜像命令

docker build -t[逸虚凌辰12]  yangrui/java .[逸虚凌辰13] 

使用tag命令重命名一样的镜像

docker tag e0b70251236c prim/java:1.0

一般情况下,安装完JDK后,我们需要配置JAVA_HOME和Path环境变量才能在命令中使用Java命令。在Dockerfile中我们可以使用Env指令来设置所需的环境变量。

指定JAVA_HOME和PATH

FROM centos:latest

MAINTAINER "Yang Rui"<[email protected]>

ADD jdk-8u191-linux-x64.tar.gz /opt

RUN ln -s /opt/jdk1.8.0_91 /opt/jdk

ENV JAVA_HOME /opt/jdk

ENV PATH $JAVA_HOME/bin:$PATH

CMD java -version

3.Dockerfile指令汇总

Dockerfile指令

描述

FROM

设置基础镜像

MAINTAINER

设置维护者信息

ADD

设置需要添加到容器中的文件(自动解压)

COPY

设置需要复制到容器中的文件(无法解压)

USER

设置运行RUN指令的用户

ENV

设置环境变量,可在RUN指令中运用这些变量

ENTRYPOINT

设置容器启动时需要运行的命令(无法覆盖)

CMD

设置容器启动时需要执行的命令(可以被覆盖)

WORKDIR

设置进入容器时的工作目录

EXPOSE

设置壳被暴露的端口号(用于端口映射)

VOLUME

设置可被挂在的数据卷(用于目录映射)

ONBUILD

设置在构建时需要自动执行的指令

七、使用DockerRegistry管理镜像

1.使用DockerHub

使用翻墙软件(蓝灯)注册dockerhub,然后登陆创建自己的Repository。

docker login

登陆dockerhub

docker push prim/java

把本地镜像上传至自己的镜像仓库

2.搭建Docker Registry

启动Dockers Registry

如果是使用的阿里云ECS,要提前在安全组开放端口50000

docker run -d[逸虚凌辰14]  -p[逸虚凌辰15]  50000:5000 -v[逸虚凌辰16]  ~/[逸虚凌辰17] docker-registry:/tmp/registry registry

此时docker ps可以查看registry已经在容器运行了。

然后,浏览器输入http://59.110.142.242:50000/v2/_catalog

如果有json返回则说明仓库搭建成功。

vim  /usr/lib/systemd/system/docker.service

     增加 ExecStart=/usr/bin/dockerd  --insecure-registry 59.110.142.242:50000

然后重启服务,加载仓库配置

systemctl daemon-reload

systemctl restart docker

重命名镜像标签

由于我们创建的镜像默认注册中心是DockerHub,使用Docker push命令推送的目的地址都是DockerHub,我们需要更改镜像的标签。添加59.110.142.242:50000/

docker tag b4401d8b4a2a 59.110.142.242:50000/prim/java

推送镜像到私有仓库

docker push 59.110.142.242:50000/prim/java

私有仓库还可以指定用户名密码,在同一局域网上可以拉取仓库的镜像。

还可以将DockerRegistry与Nginx集成将他们部署到一台稳定的服务器上,通过Nginx反响代理的方式来调用Docker Registry,并将IP绑定到一个内部域名上,比如docker-registry.xxx.com,这样局域网内部的用户可以通过该域名访问DockerRegistry。

八、Tips

1. 调整Docker内存限制

docker stats

 

使用-m指定内存大小

docker run -d -p 8080:8010 -m 512m 172.0.0.1:5000/demoe.msa/msa-api-hello:1.0.0

 


 [逸虚凌辰1]Linux tee命令用于读取标准输入的数据,并将其内容输出成文件。

tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件

使用指令"tee"将用户输入的数据同时保存到文件"file1""file2"中,输入如下命令

$ tee file1 file2 

 

 [逸虚凌辰2]表示启动容器后,打开标准收入设备,可使用键盘进行输入。开启了input(输入)功能 

 [逸虚凌辰3]表示启动容器后,分配一个伪终端TTY,将与服务器建立一个会话。

 [逸虚凌辰4]表示将要运行的镜像名称

 [逸虚凌辰5]表示运行容器中的bash应用程序,进入到系统中

 [逸虚凌辰6]以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等。

 [逸虚凌辰7]把宿主的磁盘挂载到容器中,可以理解为目录映射。

 [逸虚凌辰8]-c :建立一个压缩文件的参数指令(create 的意思);

-x :解开一个压缩文件的参数指令!

-t :查看 tarfile 里面的文件!

特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在!

因为不可能同时压缩与解压缩。

-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?

-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?

-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!

-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!

   例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成

   『 tar -zcvPf tfile sfile』才对喔!

-p :使用原文件的原来属性(属性不会依据使用者而变)

-P :可以使用绝对路径来压缩!

-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!

--exclude FILE:在压缩的过程中,不要将 FILE 打包!

 

 [逸虚凌辰9]为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件

 [逸虚凌辰10]表示容器退出时可自动删除容器,也就是说在执行完我们的查看版本命令后容器自动退出。

 [逸虚凌辰11]如果fileA存在,使用touch指令可更改这个文件或目录的日期时间,包括存取时间和更改时间;
如果fileA不存在,touch指令会在当前目录下新建一个空白文件fileA。
touch 命令详解

功能说明:改变文件或目录时间。

语 法:touch [-acfm][-d <日期时间>][-r <参考文件或目录>][-t <日期时间>][--help] [--version][文件或目录...] 或 touch [-acfm][--help][--version][日期时间][文件或目录...]

补充说明:使用touch指令可更改文件或目录的日期时间,包括存取时间和更改时间。

参 数:
-a或--time=atime或--time=access或--time=use 只更改存取时间。
-c或--no-create 不建立任何文件。
-d<时间日期> 使用指定的日期时间,而非现在的时间。
-f 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。
-m或--time=mtime或--time=modify 只更改变动时间。
-r<参考文件或目录> 把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同。
-t<日期时间> 使用指定的日期时间,而非现在的时间。
--help 在线帮助。
--version 显示版本信息

 [逸虚凌辰12]指定构建镜像的名字

 [逸虚凌辰13]表示当前目录

 [逸虚凌辰14]表示将在后台启动该容器。

 [逸虚凌辰15]表示对容器中暴露的端口进行端口映射,冒号左边为宿主机端口,右边为容器内部需要暴露的端口

 [逸虚凌辰16]挂在本地磁盘到容器磁盘

 [逸虚凌辰17]表示当前目录

猜你喜欢

转载自blog.csdn.net/qq_35921773/article/details/86626343