Docker初学

Docker 组件:

1.Docker客户端和服务器

2.Docker镜像

3.Registry

4.Docker容器

 

1.内核(确认是否安装了3.8或更高的内核版本)

uname -r 

2.检查Device Mapper

ls -l /sys/class/misc/device-mapper

如果没有,则yum -y install device-mapper

modprobe dm_mod

 

3.安装Docker

subscription-manager repos --enable=rhel-7-server-extras-rpms

yum install -y docker

 

4.启动Docker守护进程

systemctl start docker

systemctl enable docker

 

5.查看是否安装成功

docker info(返回所有容器和镜像的数量,docker使用的执行驱动和存储驱动,以及Docker的基本配置)

 

容器的创建和管理:创建、管理到停止,直到最终删除。

1.创建容器

docker run -i -t centos /bin/bash

-i:容器中STDIN是开启

-t:分配一个伪tty终端

基于centos创建容器并启动/bin/bash

首先Docker会检查本地是否存在centos镜像,不存在,则Docker就会连接官方维护的Docker Hub Registery,查看Docker Hub中是否有该镜像,Docker一旦找到该镜像,就会下载该镜像并保存到本地。

2.使用容器

输入exit,容器会停止运行,

3.查看存在的容器

docker ps -a

-a:列出所有容器

-q:仅返回容器的ID

4.重新启动已经停止的容器(start,restart)

Docker start container_name

Docker start container_ID

5.附着到容器上(attach

Docker attach container_name

Docker attach container_ID

 

6.创建守护式容器

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

-d:守护进程

 

7.查看容器的日志

docker logs container_name

docker logs --tail 10 container_name

-f

-t:加上时间戳

 

8.查看容器内的进程

docker top container_name

 

9.在容器内部运行进程

后台任务:docker exec -d container_name COMMAND

交互式任务:docker exec -t -i container_name /bin/bash

 

10.停止守护进程

docker stop container_name

 

11.自动重启容器

docker run --restart=always --name bearlu -d centos /bin/sh “while ture; do echo hello world;sleep 1;done”

--restart=on-failure:5:只有当容器的退出代码非0值得时候,才会自动重启,重启次数为5

 

12.深入容器

docker inspect container_name

--format ‘{{.Name}}{{.State.Running}}’

 

13.删除容器

Docker rm container_name

stop或者kill

-f:强制删除

 

镜像

Docker镜像是由文件系统叠加而成,最底端是一个引导文件系统,即bootfs

第二层是root文件系统rootfs

Docker第一次启动一个容器时,初始的读写层是空的。当文件系统发生变化时,这些变化都会应用到这一层上。采用写时复制(copy on write)。如果想修改一个文件,这个文件首先会从该读写层下面的只读层复制到该读写层。该文件的只读版本依旧存在,但是已经被读写层中的该文件副本所隐藏。

 

1.列出镜像

docker images

本地镜像:/var/lib/docker/containers/

 

2.拉取镜像

docker pull image_name

docker pull jdeathe/centos-ssh

tag centos:tag(是否同一个镜像,看ID号是否相同)

 

3.查找镜像

docker search image_name

 

4.构建镜像

docker commit命令

docker build命令和dockerfile文件

 

5.删除镜像(本地)

docker rmi image_name

 

 

hub.docker.com

账号:bearlu

密码:xxxxx

 

docker login

个人信息保存至~/.dockercfg文件中
1.docker commit方式:

docker commit container_ID bearlu/httpd:webserver

-m=”A new custom image”

--author=”BearLu”

bearlu/httpd 指的是镜像的用户名和仓库名,并加了一个webserver标签。

 

2.Dockerfile的定义文件和docker build 命令来构建镜像

mkdir static_web

cd static_web

touch Dockerfile

vim Dockerfile 

   FROM centos:latest

   MAINTAINER bearlu

   RUN yum -y install wget

   RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

   RUN yum clean all && yum makecache

   RUN yum -y install nginx

   RUN echo 'Hello nginx' > /usr/share/nginx/html/index.html

   EXPOSE 80

docker build -t="bearlu/static_web" .


查看镜像构造过程:

Docker history image_ID


从新镜像启动容器:

Docker run -d -p 80 --name static_web bearlu/static_web nginx -g “daemon off;”

-pDocker运行时公开哪些端口号给宿主机。

    -p 80:将Docker80端口号映射到宿主机的任意端口号

    -p 8080:80:将容器中的80端口绑定到宿主机的8080端口号上。

    -p 127.0.0.1:8080:80:将容器内的80端口绑定到本地宿主机的127.0.0.180端口

-P:用来对开公开在Dockerfile中的EXPOSE指令中设置的所有端口号。

docker ps -l

curl localhost:32769

 

3.Dockerfile指令

a) FROM

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

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

b) MAINTAINER

格式:MAINTAINER <name>,指定维护者信息

c) RUN

格式:RUN <command>RUN [“executable”,”param1”,”param2”]

前者将在shell终端中运行命令,即/bin/sh -c;后者则使用exec执行,指定使用其他终端RUN [“/bin/bash” ,”-c”,”echo hello”]

每条RUN指令将在当前镜像基础上执行指定命令,并提交为新的镜像。使用(\)来换行。

d) CMD

CMD [“executable”,”param1”,”param2”]

CMD command param1 param2 /bin/sh中执行,提供给需要交互的应用。

CMD [”param1”,”param2”]提供给ENTERYPOINT的默认参数

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

e) EXPOSE

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

告诉Docker服务端容器暴露的端口号,共互联系统的使用。在启动容器时需要通过-PDocker主机会自动分配一个端口转发到指定的端口。

f) ENV

格式:ENV <key> <value>

指定一个环境变量,会被后续RUN指令使用,并在容器运行时保持

g) ADD

格式:ADD <src> <dest>

将赋值指定的<src>到容器中的<dest>。其中<src>可以是Dockerfile所在目录的一个相对路径(文件或目录);也可以是一个URL;还可以是一个tar文件(自动解压为目录)

h) COPY

格式:COPY <src> <dest>

复制本地主机的<src>(Dockerfile所在目录的相对路径,文件或目录)为容器中的<dest>.目标路径不存在时,会自动创建

当使用本地目录为源目录时,推荐使用COPY

i) ENTRYPOINT

格式:ENTRYPOINT [“executable”,”param1”,”param2”]

ENTRYPOINT command,param1,param2shell中执行)

配置容器启动后执行的命令,并且不可被docker run提供的参数覆盖

每个Dockerfile中只能有一个ENTRYPIONT。如果指定了多条ENTRYPOINT,只有最后一条会被执行。

j) VOLUME

格式:VOLUME [“/data”]

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

k) USER

格式:USER daemon

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

当服务不需要管理员权限时,可以通过该命令指定运行用户。临时获取管理员权限可以使用gosu。而不推荐使用sudo

l) WORKDIR

格式:WORKDIR /path/to/workdir

为后续的RUNCMDENTRYPOINT指令配置工作目录。

可以使用多个WORKDIR指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。

m) ONBUILD

格式:ONBUILD [INSTRUCTION]

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

ONBUILD ADD . /app/src

ONBUILD RUN /usr/local/bin/python-build --dir /app/src


dockerfile

FROM image-A,会自动执行ONBUILD指令内容,等价于在后面添加了两条指令。

 

将镜像推送到Docker Hub

docker push bear/static_web

 

自动构建

Dockerfile文件的仓库连接到Docker Hub即可。

创建本地的Registry

从容器运行Registry

docker run -p 5000:5000 registry

启动一个运行Registry应用的容器。


给镜像打标签:

docker tag image_id docker.example.com:5000/bearlu/static_web

docker.example.com:Register主机名

把镜像推送的新的Registry

docker push docker.example.com:5000/bearlu/static_web

docker run -t -i docker.example.com:5000/bearlu/static_web

 

 

一个示例:

mkdir sample && cd sample

touch Dockerfile

mkdir nginx  &&  cd nginx

wget https://raw.githubusercontent.com/jamtur01/dockerbook-code/master/code/5/sample

/nginx/global.conf

wget https://raw.githubusercontent.com/jamtur01/dockerbook-code/master/code/5/sample

/nginx/nginx.conf

vim nginx.conf

    worker_processes 4;

    pid /run/nginx.pid;

    daemon off;

    events {  }

    http {

            sendfile on;

            tcp_nopush on;

            tcp_nodelay on;

            keepalive_timeout 65;

            types_hash_max_size 2048;

            include /etc/nginx/mime.types;

           default_type application/octet-stream;

           access_log /var/log/nginx/access.log;

          error_log /var/log/nginx/error.log;

          gzip on;

          gzip_disable "msie6";

          include /etc/nginx/conf.d/*.conf;

}

 

cd ..

vim Dockerfile

                FROM centos:latest

                MAINTAINER Bearlu

                ENV REFRESHED_AT 2016-03-22

                RUN yum -y install wget

                RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

                RUN yum clean all && yum makecache

                RUN yum -y install nginx

                RUN mkdir -p /var/www/html

                ADD nginx/global.conf /etc/nginx/conf.d/

                ADD nginx/nginx.conf /etc/nginx/nginx.conf

                EXPOSE 80

docker build -t bearlu/nginx .

mkdir website 

cd website

wget https://raw.githubusercontent.com/jamtur01/dockerbook-code/master/code/5/sample/website/index.html

cd ..

docker run -d -p 80 --name website -v $PWD/website:/var/www/html/website bearlu/nginx nginx

docker ps -l

curl http://localhost:32771

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值