Docker实践(二)主要概念和命令

上一节学习和实践了Docker的基础和安装,本节主要学习Docker的主要概念和命令

Docker有三大核心概念,分别为:镜像、容器、仓库

一、镜像

Docker镜像是运行容器的前置条件,如果本地没有镜像,Docker 会尝试从默认镜像仓库(Docker Hub中注册的)下载,用户也可以配置自己的私有仓库,从私有仓库下载镜像,这点非常重要,使得企业应用可以使用自己的仓库,解决安全隐患。

1、 获取镜像

获取镜像的命令为: docker pull  ubuntu

执行这条命令,会从官方库里,将ubuntu(乌班图)的最后一个版本获取下来,既:docker pull  registry.hub.docker.com/ubuntu:latest

如果想获取某个指定版本TAG,命令为: docker pull  ubuntu:14.04

如果要从私有库里获取,则命令为:  docker   pull  192.168.136.177:5000/ubuntu    这里192.168.136.177:5000是自己的私有仓库

下载后,可以通过run命令执行  如:  docker run  -t  -i  ubuntu /bin/bash

2、查看镜像信息

使用命令:  docker images可以查看当前docker环境里面的镜像信息

扫描二维码关注公众号,回复: 1662573 查看本文章

[root@dev-177 ~]# docker  images
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
192.168.136.177:5000/appname   ubuntu              710477b8876f        24 hours ago        560MB
appname                        ubuntu              710477b8876f        24 hours ago        560MB
ssh                            dockerfile          319c7aa50a7f        2 days ago          206MB
ubuntu                         latest              0458a4468cbc        4 days ago          112MB
registry                       latest              d1fd7d86a825        2 weeks ago         33.3MB
hello-world                    latest              f2a91732366c        2 months ago        1.85kB
sameersbn/redis                latest              d8f7b0e07097        6 months ago        203MB
sameersbn/gitlab               8.4.4               9d1069e2b30c        23 months ago       720MB
sameersbn/redmine              3.2.0-4             7eb43870e9c7        2 years ago         636MB
sameersbn/postgresql           9.4-12              a100f2a18ec3        2 years ago         231MB
[root@dev-177 ~]# 

这里名,最重要的几个字段:

REPOSITORY  说明镜像来自于什么仓库

TAG   镜像标签,用来区分版本

IMAGE_ID  镜像的唯一标识


上面有两个镜像:192.168.136.177:5000/appname  和  appname镜像,他们的ID是相同的,说明是同一个镜像, 带IP地址的是通过docker tag 命令生成的,指向同一个镜像

这样指定后,就可以push 到自己的私有仓库192.168.136.177:5000中。

查看更详细的信息可以用命令: docker  inspect IMAGE_ID  来查看某个具体的镜像信息

3、查找,删除

查找命令:  docker search  关键字

按镜像名删除:  docker rmi   镜像名   

按镜像ID删除:  docker rmi  镜像ID   会删除所有为此ID的镜像名称引用

如果镜像有被某容器使用是不能删除的,除非使用   -f 参数     docker  rmi  -f   镜像ID

查看当前被容器使用的镜像:  docker  ps -a

原则上: 先删除使用镜像的容器,再删除镜像

4、创建镜像:

镜像的创建有2种方式:  commit 或者使用dockerfile 文件

当我们在运行的容器里面,修改了一些内容后,可以使用commit 命令进行创建

docker  commit  -m  修改内容  -a 作者   容器ID   镜像名


使用Dockerfile 文件方式,涉及如下命令:

1) FROM

必须为第一条指令,说明镜像继承自哪个基础版本

2)MAINTAINER

维护信息,指本image是谁进行维护

3) RUN

可以使用shell终端或者exec 方式来执行

4) CMD

容器启动后,执行的命令,每个Dockerfile 只能有一条CMD命令

5) EXPOSE

暴露的端口号

6)ENV 

环境变量,被后续的RUN指令使用

7)ADD

复制命令,ADD src  dest ,  src 可以是dockfile所在目录作为根目录的一个相对路径目录,也可以是url, 或者压缩文件

8)COPY

复制  COPY  src  dest  , src 是目录

9)ENTRYPOINT

容器的入口点

其他略,下面展示一个Dockfile文件的例子

#继承于镜像ubuntu
FROM ubuntu

#维护人员
MAINTAINER Chen Weiqun<[email protected]>  

#更新源 
RUN apt-get update  

#安装ssh
RUN apt-get install -y openssh-server  

#安装vim
RUN apt-get install -y vim

#创建sshd 服务
RUN mkdir -p /var/run/sshd 
RUN mkdir -p /root/.ssh 

#取消pam登录限制 
RUN sed -ri 's/^PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config  
RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config  

#添加认证文件和启动脚本 
ADD authorized_keys /root/.ssh/authorized_keys 
ADD run.sh /root/run.sh 

#修改确保run.sh执行权限
RUN chmod u+x /root/run.sh 

#暴露端口 
EXPOSE 22 


##install JDK and TOMCAT
RUN mkdir -p /usr/java
RUN mkdir -p /work
ADD jdk-7u80-linux-x64.gz  /usr/java/
ADD tomcat /work/ 

#设置环境变量
ENV JAVA_HOME=/usr/java/jdk1.7.0_80 CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar PATH=$PATH:$JAVA_HOME/bin
RUN echo "JAVA_HOME=/usr/java/jdk1.7.0_80\nCALSSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar\nPATH=$PATH:$JAVA_HOME/bin" >> /etc/profile

#暴露tomcat端口 
EXPOSE 8080
EXPOSE 8009
EXPOSE 8443

#修改tomcat目录中执行的权限
RUN chmod u+x /work/app-tomcat/bin/*.sh

#设置默认启动的命令 
CMD ["/root/run.sh"]



5、镜像的导入导出

导出到tar 文件:  docker  save -o  镜像.tar   镜像名:TAG

导入:  docker  load  --input   镜像.tar


6、上传镜像

docker  push  NAME[:TAG]

docker  push  [库]NAME[:TAG]



二、容器

容器是镜像的一个运行实例,一个镜像可以运行多个容器。每个容器是独立的,包含了镜像制作的一个或者一组应用,以及它们必须的运行环境。

1)创建容器

命令:  docker  create it   镜像名:TAG

可以创建一个镜像,但是没有运行起来

2) 运行

命令:  docker  start  容器ID

启动一个容器

3) 可以创建和运行一起

命令:docker  run  ubuntu  /bin/echo   "Hello"

这个命令创建了一个基于ubuntu镜像的容器,并运行echo 命令

4) 终止和删除容器

终止命令:  docker stop  容器ID

删除容器: docker rm  容器ID

5) 容器的导入和导出

导出:  docker export 容器ID >  导出文件.tar

导入:  cat  导出文件.tar  | docker  import  -  库/镜像名称:TAG

容器的导入与镜像的导入区别:容器的导入,只是当前的容器镜像,不包含历史信息和元数据。 导入后,在镜像里面可以看到有一个刚导入的镜像。


三、仓库

1、官方仓库

Docker 提供了官方的仓库,安装好docker 环境后,使用pull 命令就是从官方仓库下载镜像。由于企业应用考虑安全性问题,都会要求企业库与网络库有隔离,所以下面重点说下私有仓库

2、私有仓库

1) 下载并启动私有仓库

私有仓库由私有仓库存储于仓库管理容器组成。docker 提供了一个registry 容器来管理仓库,

使用命令:   docker  run -d -p 5000:5000 -v  /opt/data/registry:/tmp/registry  registry

这个命令,是在本机的5000端口,创建一个私有库, 存储位置:  本机的  /opt/data/registry。  registry 是官网下载的仓库管理容器名称

启动后,这个仓库就开始工作。

2) 使用私有仓库

docker tag  IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]

从私有库下载镜像

如:  docker  pull  192.168.136.177:5000/appname:ubuntu

查看私有库的镜像

[root@work-199 ~]# curl -XGET  http://192.168.136.177:5000/v2/_catalog
{"repositories":["appname"]}
[root@work-199 ~]# 


四、其他

1、docker下载的镜像到底怎么存放

[root@dev-177 docker]# pwd
/var/lib/docker
[root@dev-177 docker]# ls  -l
总用量 16
drwx------.  2 root root   24 12月 20 15:34 builder
drwx------.  4 root root  150 1月  29 19:55 containers
drwx------.  3 root root   21 12月 20 15:34 image
drwxr-x---.  3 root root   19 12月 20 15:34 network
drwx------. 89 root root 8192 1月  29 19:55 overlay
drwx------.  4 root root   32 12月 20 15:34 plugins
drwx------.  2 root root    6 12月 20 15:34 swarm
drwx------.  2 root root    6 1月  29 19:52 tmp
drwx------.  2 root root    6 12月 20 15:34 trust
drwx------. 14 root root 4096 1月  29 17:17 volumes
[root@dev-177 docker]# 


猜你喜欢

转载自blog.csdn.net/csolo/article/details/79173542