docker 操作

一、

获取镜像

docker pull ubuntu:15.10

在这里插入图片描述
docker 允许在容器内运行应用程序
在这里插入图片描述
docker run ubuntu:15.10 /bin/echo ‘hello"

运行交互式的容器

docker -i -t   ubuntu:15.10 /biin/bash

在这里插入图片描述
-t: 在新容器内指定一个伪终端或终端
-i : 允许对容器内的标准输入进行交互。

启动容器(后台)

1)创建一个以进程方式运行的容器

docker run -d  ubuntu:15.10 /bin/sh -c “while true;do echo hello,world;sleep 1;done”

在这里插入图片描述
得到一长串的字符,即容器ID

2)确认容器有正在运行,通过docker ps 查看

docker ps

在这里插入图片描述
3)在容器内docker logs ,查看容器内的标准输出

docker logs   ID(写具体的字符)

在这里插入图片描述
4)停止容器

`docker stop  ID(写具体的字符)

在这里插入图片描述
`5)查看

docker  ps

在这里插入图片描述

二、docker容器使用

1)运行一个web应用

 docker pull training/webapp # 载入镜像

在这里插入图片描述

docker run -d -P training/webapp python app.py

在这里插入图片描述
-d:让容器在后台运行。
-P:将容器内部使用的网络端口映射到我们使用的主机上。

2)查看web应用容器

docker  ps

Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32768 上。
在这里插入图片描述

还可通过浏览器访问web应用

在这里插入图片描述

可以通过 -p 参数来设置不一样的端口:

docker run -d -p 5000:5000 training/webapp python app.py

在这里插入图片描述

docker   ps

在这里插入图片描述

使用 docker port 可以查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号。

docker    port    40f84753d8d0

docker logs [ID 或者名字] 可以查看容器内部的标准输出。

-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出

 docker logs -f 40f84753d8d0

在这里插入图片描述

docker top 来查看容器内部运行的进程

docker  top   40f84753d8d0

3)检查web应用程序

使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。

 docker inspect 40f84753d8d0 

在这里插入图片描述

4)停止web容器应用

 docker stop 40f84753d8d0

在这里插入图片描述

在这里插入图片描述
5)重启web应用容器

正在运行的容器,我们可以使用 docker restart 命令来重启

docker start 40f84753d8d0

在这里插入图片描述

docker ps -l 查询最后一次创建的容器

 docker ps –l

在这里插入图片描述

6)移除web应用容器

docker rm 40f84753d8d0

在这里插入图片描述
由于忘记关闭容器,报上述错误,删除容器时,容器必须是停止状态,
在这里插入图片描述

三、docker镜像使用

1)列出本地主机上的镜像

docker   images

在这里插入图片描述
2)获取一个新镜像

docker  pull   Ubuntu:13.10

在这里插入图片描述

3)查找镜像

docker  search   httpd

在这里插入图片描述

4)创建镜像

1.从已经创建的容器中更新镜像,并且提交这个镜像
2.使用 Dockerfile 指令来创建一个新的镜像

5)更新镜像

更新镜像之前,需要使用一个镜像创建一个容器

docker run -t -i ubuntu:15.10 /bin/bash

在运行的容器内使用 apt-get update 命令进行更新。
在完成操作之后,输入 exit 命令来退出这个容器。

可以通过命令 docker commit 来提交容器副本。

docker   commit  -m=“has update” -a=“anliu” ID
anliu/ubuntu:v2

-m:提交的描述信息
-a:指定镜像作者
e218edb10161:容器 ID
runoob/ubuntu:v2:指定要创建的目标镜像名

6)构建镜像

使用命令docker build 构建,需要创建一个Dockerfile

vim  Dockerfile

在这里插入图片描述

docker build -t runoob/centos:6.7 .

在这里插入图片描述
-t:指定要创建的目标镜像名
. Dockerfile 文件所在目录,

使用docker images 查看创建的镜像是否在列表中
在这里插入图片描述

四、Dockerfile

dockerfile 是用来构建 Docker 镜像的构建文件,是由一系列命令和参数构成的脚本。

Docker 执行 Dockerfile 的大致流程:

(1)docker 从基础镜像运行一个容器。
(2)执行一条指令并对容器作出修改。
(3)执行类似 docker commit 的操作提交一个新的镜像层。
(4)0docker 再基于刚提交的镜像运行一个新容器。
(5)执行 dockerfile 中的下一条指令直到所有指令都执行完成

dockerfile语法

1)FROM
功能为指定基础镜像,并且必须是第一条指令。
如果不以任何镜像为基础,那么写法为:FROM scratch。

2)RUN
功能为运行指定的命令
RUN 命令有两种格式
RUN
RUN [“executable”, “param1”, “param2”]
第一种后边直接跟 shell 命令
在 linux 操作系统上默认 /bin/sh -c
在 windows 操作系统上默认 cmd /S /C
第二种是类似于函数调用。可将 executable 理解成为可执行文件,后面就是两个参数。

3)CMD
功能为容器启动时要运行的命令
语法有三种写法

  1. CMD [“executable”,“param1”,“param2”]
  2. CMD [“param1”,“param2”]
  3. CMD command param1 param2

RUN 是构件容器时就运行的命令以及提交运行结果 CMD 是容器启动时执行的命令,在构件时并不运行,构件时紧紧指定了这个命令到底是个什么样子

4))LABEL
功能是为镜像指定标签
语法:
LABEL = = = …
一个 Dockerfile 种可以有多个 LABEL,如下:
LABEL “com.example.vendor”=“ACME Incorporated”
LABEL com.example.label-with-value=“foo”
LABEL version=“1.0”
LABEL description=“This text illustrates
that label-values can span multiple lines.”

5)MAINTAINER
指定作者
语法:
MAINTAINER

6))EXPOSE
功能为暴漏容器运行时的监听端口给外部
但是 EXPOSE 并不会使容器访问主机的端口
如果想使得容器与主机的端口有映射关系,必须在容器启动的时候加上 -P 参数

(7)ENV
功能为设置环境变量
语法有两种

  1. ENV
  2. ENV = …
    两者的区别就是第一种是一次设置一个,第二种是一次设置多个

(8)ADD
一个复制命令,把文件复制到镜像中。
如果把虚拟机与容器想象成两台 linux 服务器的话,那么这个命令就类似于 scp,只是 scp 需要
加用户名和密码的权限验证,而 ADD 不用。
语法如下:
3. ADD …
4. ADD ["",… “”]
路径的填写可以是容器内的绝对路径,也可以是相对于工作目录的相对路径
可以是一个本地文件或者是一个本地压缩文件,还可以是一个 url

9)COPY
看这个名字就知道,又是一个复制命令
语法如下:
5. COPY …
6. COPY ["",… “”]
与 ADD 的区别
COPY 的只能是本地文件,其他用法一致

10)ENTRYPOINT
功能是启动时的默认命令
语法如下:
7. ENTRYPOINT [“executable”, “param1”, “param2”]
8. ENTRYPOINT command param1 param2

11)VOLUME
可实现挂载功能,可以将内地文件夹或者其他容器种得文件夹挂在到这个容器种
语法为:
VOLUME ["/data"]
说明:
["/data"]可以是一个 JsonArray ,也可以是多个值。所以如下几种写法都是正确的
VOLUME ["/var/log/"]
VOLUME /var/log
VOLUME /var/log /var/db
一般的使用场景为需要持久化存储数据时

12)USER
设置启动容器的用户,可以是用户名或 UID,所以,只有下面的两种写法是正确的
USER daemo
USER UID
注意:如果设置了容器以 daemon 用户去运行,那么 RUN, CMD 和 ENTRYPOINT 都会以这个用户去运行

13)WORKDIR
语法:
WORKDIR /path/to/workdir
设置工作目录,对 RUN,CMD,ENTRYPOINT,COPY,ADD 生效。如果不存在则会创建,也可以设置
多次。
如:
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
pwd 执行的结果是/a/b/c
WORKDIR 也可以解析环境变量

(14)ARG
语法:
ARG [=]
设置变量命令,ARG 命令定义了一个变量,在 docker build 创建镜像的时候,使用 --build-arg
=来指定参数
如果用户在 build 镜像时指定了一个参数没有定义在 Dockerfile 种,那么将有一个 Warning
提示如下:
[Warning] One or more build-args [foo] were not consumed.

15)ONBUILD
语法:
ONBUILD [INSTRUCTION]
这个命令只对当前镜像的子镜像生效。
比如当前镜像为 A,在 Dockerfile 种添加:
ONBUILD RUN ls -al
这个 ls -al 命令不会在 A 镜像构建或启动的时候执行
此时有一个镜像 B 是基于 A 镜像构建的,那么这个 ls -al 命令会在 B 镜像构建的时候被执行。

(16)STOPSIGNAL
语法:
STOPSIGNAL signal
STOPSIGNAL 命令是的作用是当容器推出时给系统发送什么样的指令

(17)HEALTHCHECK
容器健康状况检查命令
语法有两种:

  1. HEALTHCHECK [OPTIONS] CMD command
  2. HEALTHCHECK NONE
    第一个的功能是在容器内部运行一个命令来检查容器的健康状况
    第二个的功能是在基础镜像中取消健康检查命令
    [OPTIONS]的选项支持以下三中选项:
    –interval=DURATION 两次检查默认的时间间隔为 30 秒
    –timeout=DURATION 健康检查命令运行超时时长,默认 30 秒
    –retries=N 当连续失败指定次数后,则容器被认为是不健康的,状态为 unhealthy,默认次
    数是 3
    注意:
    HEALTHCHECK 命令只能出现一次,如果出现了多次,只有最后一个生效。
    CMD 后边的命令的返回值决定了本次健康检查是否成功,具体的返回值如下:
    0: success - 表示容器是健康的
    1: unhealthy - 表示容器已经不能工作了
    2: reserved - 保留值
    例子:
    HEALTHCHECK --interval=5m --timeout=3s \

五、dickerfile实例解析

构建镜像三步骤
编写 dockerfile 文件
docker build
docker run

1)编辑脚本

`vim dockerfile`

在这里插入图片描述

2)构建镜像

docker build -t yang:v1     .                         

在这里插入图片描述
3)列出镜像变更历史

docker history yang:v1

在这里插入图片描述

六、自定义tomcat

1.新建一个目录,将 jdk 和 tomcat 的压缩包 copy 进来

mkdir yy
cd  yy
mv /root/apache-tomcat-8.0.36.tar.gz .
 mv /root/jdk-8u161-linux-x64.tar.gz . 

在这里插入图片描述
2、编写dockerfile文件

vim dockerfile
在这里插入图片描述
3、构建一个新镜像

docker build -t yyy:v2 .

在这里插入图片描述
在这里插入图片描述
4、运行

docker run -d -p 9080:8080 --name myt9 -v
/zzyyuse/mydockerfile/tomcat9/test:/usr/local/apache-tomcat-8.0.36/webapps/test -v
/zzyyuse/mydockerfile/tomcat9/tomcat9logs/:/usr/local/apache-tomcat-8.0.36/logs --privileged=true yyy:v2

在这里插入图片描述

七、Docker 生产环境部署和实践(docker安装nginx)

(1)在docker hub 上查找nginx镜像

docker  search   nginx

在这里插入图片描述
(2)拉取官方的镜像

docker  pull  nginx

在这里插入图片描述

docker  images nginx

在这里插入图片描述

(3)启动实例

 docker run --name nginx -p 8081:80 -d nginx

在这里插入图片描述

docker ps

在这里插入图片描述
(4)访问测试

在这里插入图片描述
(5)nginx部署

1)创建目录

mkdir -p ~/nginx/www ~/nginx/logs ~/nginx/conf

2)拷贝容器内 Nginx 默认配置文件到本地当前目录下的 conf 目录,容器 ID 可以查看 docker ps
命令输入中的第一列:

docker cp d775d61a70d5:/etc/nginx/nginx.conf ~/nginx/conf

3)

docker run -d -p 8082:80 --name nginx-test-web -v ~/nginx/www:/usr/share/nginx/html -v 
~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/nginx/logs:/var/log/nginx nginx

在这里插入图片描述

-p 8082:80: 将容器的 80 端口映射到主机的 8082 端口。
–name runoob-nginx-test-web:将容器命名为 nginx-test-web。
-v ~/nginx/www:/usr/share/nginx/html : 将 我 们 自 己 创 建 的 www 目 录 挂 载 到 容 器
的 /usr/share/nginx/html。
-v~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:将我们自己创建的 nginx.conf
挂载到容器的 /etc/nginx/nginx.conf。
-v ~/nginx/logs:/var/log/nginx:将我们自己创建的logs 挂载到容器的 /var/log/nginx。

4)编辑网页

[root@localhost ~]#cd ~/nginx/www
[root@localhost www]# vim index.html

在这里插入图片描述
5)网页测试
在这里插入图片描述

如果要重新载入 NGINX 可以使用以下命令发送 HUP 信号到容器:
docker kill -s HUP container-name
重启 NGINX 容器命令:
docker restart container-name

八、docker 安装PHP

(1)在docker hub 上查找php镜像

docker search  php

在这里插入图片描述
(2)拉取官方镜像

docker pull php:5.6-fpm

在这里插入图片描述
(3)nginx+php 部署

启动 PHP。

docker run --name myphp-fpm -v ~/nginx/www:/www -d php:5.6-fpm

在这里插入图片描述

(4)修改配置

cd nginx/conf/
vim test-php.conf
在这里插入图片描述
(5)启动服务·

run --name runoob-php-nginx -p 8083:80 -d -v ~/nginx/www:/usr/share/nginx/html:ro
-v ~/nginx/conf/conf.d:/etc/nginx/conf.d:ro --link myphp-fpm:php nginx
在这里插入图片描述

-p 8083:80: 端口映射,把 nginx 中的 80 映射到本地的 8083 端口。 ~/nginx/www: 是本地 html 文件的存储目录,/usr/share/nginx/html 是容器内 html 文件的存 储目录。 ~/nginx/conf/conf.d:
是本地 nginx 配置文件的存录,/etc/nginx/conf.d 是容器内 nginx 配 置文件的存储目录。
–link myphp-fpm:php: 把 myphp-fpm 的网络并入 nginx,并通过修改 nginx 的 /etc/hosts, 把域名 php 映射成 127.0.0.1,让 nginx 通过 php:9000 访问 php-fpm。

(6)测试

cd ~/nginx/www
vim index.php

在这里插入图片描述
在这里插入图片描述

九、自建私有仓库

docker 客户端:192.168.76.196
docker 私有仓库服务器:192.168.76.206

(1)在服务端192.168.76.206拉取仓库镜像:registry

docker pull registry

在这里插入图片描述

docker run -d -v /registry:/var/lib/registry -p 5000:5000 --restart =always --privileged=true --name registry registry:latest

在这里插入图片描述成功执行,私有仓库搭建成功

目的为防止docker 私有仓库这个容器被删除,仓库里的镜像也会被删除。

2)客户端上传镜像(192.168.76.196)

docker pull hello-world

在这里插入图片描述
给 hello-world 镜像打个 tag

docker tag hello-world 192.168.76.206:5000/hello-world:latest

将新的 hello-world 镜像上传到私有仓库。

docker push 192.168.42.141:5000/hello-world:latest

docker 私有仓库服务器,默认是基于 https 传输的,所以我们需要在客户端 192.168.42.140
做相关设置,不使用 https 传输。

vim /etc/docker/daemon.json

在这里插入图片描述

设置完成后重启机器在

docker push 192.168.76.206:5000/hello-world:latest

在这里插入图片描述

(3)在私有仓库192.168.76.206上查看上传的镜像

ls /registry/docker/registry/v2/repositories

在这里插入图片描述
或者在客户端执行命令查看(192.168.76.196)

curl http://192.168.42.141:5000/v2/_catalog

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值