docker基础

最近学写了一点docker,现在进行一下总结。希望大家多多指正。

docker是类似虚拟机的东西,可以进行虚拟化,它从广义上来讲是容器,可以把操作系统,内存之类的东西,可以在容器里面运行程序,并且不需要因为软件的迁移或者其他更换×××等原因,又进行重新配置,并且内存消耗小,启动速度快。跟物流方面的集装箱的东西类似。


docker主要由镜像,容器构成,镜像是可以是MySQL之类的软件,也可以是Tomcat之类的web服务器,必须先有镜像,才能有生成容器,可以往容器里下载各种工具或者软件。


Dockerfile由4部分信息组成:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。

示例:

Version 0.1

基础镜像

FROM ubuntu:latest

维护者信息

MAINTAINER yushu

镜像操作命令

RUN apt-get -yqq update && apt-get install -yqq apache2 && apt-get clean

容器启动命令

CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

1、FROM(借鉴https://www.cnblogs.com/niloay/p/6261784.html)

格式:FROM <image>或 FROM <image>:<tag>

第一条指令必须为FROM指令,并且,如果在同一个Dockerfile中创建多个镜像时,可以使用多个FROM指令(每个镜像一次)

2、MAINTAINET

格式:MAINTAINET <name>

指定维护者的信息

3、RUN

格式:RUN <command> 或 RUN ["", "", ""]

每条指令将在当前镜像基础上执行,并提交为新的镜像。(可以用“\”换行)

4、CMD

格式:CMD ["","",""]

指定启动容器时执行的命令,每个Dockerfile只能有一条CMD指令,如果指定了多条指令,则最后一条执行。(会被启动时指定的命令覆盖)

5、EXPOSE

格式:EXPOSE <port> [ <port> ...]

告诉Docker服务端暴露端口,在容器启动时需要通过 -p 做端口映射

6、ENV

格式:ENV <key> <value>

指定环境变量,会被RUN指令使用,并在容器运行时保存

7、ADD

格式:ADD <src> <dest>

复制指定的<src>到容器的<dest>中,<src>可以是Dockerfile所在的目录的一个相对路径;可以是URL,也可以是tar.gz(自动解压)

8、COPY

格式:COPY <src> <dest>

复制本地主机的 <src> ( 为 Dockerfile 所在目录的相对路径)到容器中的 <dest> (当使用本地目录为源目录时,推荐使用 COPY)

9、ENTRYPOINT

格式:ENTRYPOINT ["","",""]

配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。(每个 Dockerfile 中只能有一个 ENTRYPOINT ,当指定多个时,只有最后一个起效)

10、VOLUME

格式:VOLUME ["/mnt"]

创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等

11、USER

格式:USER daemon

指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。

12、WORKDIR

格式:WORKDIR /path/to/workdir

为后续的 RUN 、 CMD 、 ENTRYPOINT 指令配置工作目录。(可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径, 则会基于之前命令指定的路径)

13、ONBUILD

格式:ONBUILD [INSTRUCTION]

配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令


docker主要运用以下的语句进行操作。

零碎知识点:

        • 查看linux版本 lsb_release -a为centos(本机)
        • 查看容器的版本 cat /etc/issue为Ubuntu(本机)
        • git clone 网址(从git oschina网上克隆下程序)
        • 基于centos镜像创建的容器,往容器里面加入工具,使用yum install
        • 基于ubuntu镜像创建的容器,往容器里面加入工具,使用apt-get

镜像:
docker search name
docker pull 镜像名:标签(如果没有标签,默认的是下载latest的镜像)
docker push 镜像名
docker build -t 镜像名(从Dockerfile文件中创建镜像)
docker images(查看本地镜像)
docker images -a
docker rmi -f 镜像名+版本/镜像ID(强制删除镜像,只有当容器)
docker rmi $(docker images -q -f dangling=true)(删除所有未打 dangling 标签的镜像 )
docker rmi $(docker images -q)(删除所有镜像 )

容器:
docker run -d(后台) -p 8080(主机端口号):80(容器端口号) --name 容器名centos:7.1(镜像) /bin/bash
docker run -it (交互模式) -p 8080(主机端口号):80(容器端口号) --name 容器名 centos:7.1(镜像) /bin/bash
docker exec -it 容器ID /bin/bash(进入容器内部查看)
docker ps(查看只有在运行中的容器)
docker ps -a(查看全部的容器)
docker ps -l(查看最近创建的容器)
docker log 容器名(查看容器内的标准输出)
docker start 容器ID
docker stop 容器ID
docker restart 容器ID
docker rm -f 容器ID(强制删除容器)
docker top 容器ID(查看运行中容器中的进程)
docker kill $(docker ps -a -q)(杀死所有正在运行的容器 )
docker rm $(docker ps -a)(删除所有已经停止的容器 )
-p:虚拟机取用固定的端口映射给容器端口,当容器销毁时,这个端口才会释放
-P:虚拟机会随机的取用空闲的端口映射给容器,当容器启动和容器运行时的端口有可能不同,这个端口是时刻变化的

日常文件操作:
mkdir -p my/test(创建文件夹)
rm -rf my(删除整个文件夹)
rm -rf my/test(删除子文件夹test)
cd ..(返回上一层目录)
ls(查看)
cd(进入文件)
pwd(查看根目录)
vim Dockerfile(编辑Dockerfile文件)
wq!(进去Dockerfile文件时,Insert进入编辑模式,ESC返回,输入此命令,编辑后保存退出)
q!(直接退出)


出现问题的解决方法:
1、Rpmdb checksum is invalid: dCDPT(pkg checksums): kmod.x86_64 0:20-15.el7_4.7 – u
(rpm出现数据损坏)
解决方案:在Dockerfile文件中的每一个yum的前面加上这个语句rpm --rebuilddb &&
2、putty中显示的语句错位
解决方案:改变行数和列数大一些,为100*100

猜你喜欢

转载自blog.51cto.com/12602793/2112460