安装一些必要的系统工具:
yum install -y yum-utils device-mapper-persistent-data lvm2
添加软件源信息:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新 yum 缓存:
yum makecache fast
安装 Docker-ce:
yum -y install docker-ce
启动 Docker 后台服务
systemctl start docker
测试运行 hello-world
docker run hello-world
Centos 6
yum install -y epel-release
yum install -y docker-io
安装后的配置文件
vim /etc/sysconfig/docker
建议阿里云的 网易的很渣
启动Docker 后台服务
service docker start
帮助命令
docker version
docker info
docker --help
镜像命令
docker images
===========================================================================================
[root@instance-g0n0qkxg ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
my 2.2 a29a4de376a1 8 hours ago 355 MB
httpd latest c5b682398748 47 hours ago 131.6 MB
tomcat latest 36b736745f36 5 days ago 462.6 MB
nginx latest fc6a3f930cfd 5 days ago 109.1 MB
centos latest ea4b646d9000 12 days ago 200.4 MB
//列出本地的镜像
docker search httpd
查找镜像
我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/
我们也可以使用
docker search
====================================================================================
[root@instance-g0n0qkxg ~]# docker search tomcat
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
tomcat Apache Tomcat is an open source implementa... 2094 [OK]
tomee Apache TomEE is an all-Apache Java EE cert... 58 [OK]
dordoka/tomcat Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 ba... 49 [OK]
davidcaste/alpine-tomcat Apache Tomcat 7/8 using Oracle Java 7/8 wi... 31 [OK]
bitnami/tomcat Bitnami Tomcat Docker Image 25 [OK]
consol/tomcat-7.0 Tomcat 7.0.57, 8080, "admin/admin" 16 [OK]
cloudesire/tomcat Tomcat server, 6/7/8 15 [OK]
tutum/tomcat Base docker image to run a Tomcat applicat... 11
meirwa/spring-boot-tomcat-mysql-app a sample spring-boot app using tomcat and ... 10 [OK]
aallam/tomcat-mysql Debian, Oracle JDK, Tomcat & MySQL 8 [OK]
jeanblanchard/tomcat Minimal Docker image with Apache Tomcat 8
rightctrl/tomcat CentOS , Oracle Java, tomcat application s... 3 [OK]
maluuba/tomcat7-java8 Tomcat7 with java8. 3
amd64/tomcat Apache Tomcat is an open source implementa... 2
arm64v8/tomcat Apache Tomcat is an open source implementa... 2
camptocamp/tomcat-logback Docker image for tomcat with logback integ... 1 [OK]
jelastic/tomcat An image of the Tomcat Java application se... 1
99taxis/tomcat7 Tomcat7 1 [OK]
fabric8/tomcat-8 Fabric8 Tomcat 8 Image 1 [OK]
primetoninc/tomcat Apache tomcat 8.5, 8.0, 7.0 1 [OK]
s390x/tomcat Apache Tomcat is an open source implementa... 0
picoded/tomcat7 tomcat7 with jre8 and MANAGER_USER / MANAG... 0 [OK]
cfje/tomcat-resource Tomcat Concourse Resource 0
swisstopo/service-print-tomcat backend tomcat for service-print "the true... 0
oobsri/tomcat8 Testing CI Jobs with different names. 0
[root@instance-g0n0qkxg ~]#
命令来搜索镜像。比如我们需要一个httpd的镜像来作为我们的web服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。
拖取镜像
我们决定使用上图中的httpd 官方版本的镜像,使用命令 docker pull 来下载镜像。
docker pull httpd
==========================================================================================
[root@instance-g0n0qkxg ~]# docker pull httpd
latest: Pulling from httpd
e1ca9fd53bbf: Pull complete
22c70239aff1: Pull complete
f634d7bb8607: Pull complete
e7db50fc1859: Pull complete
fe431389154b: Pull complete
b83c35b1a736: Pull complete
70fefe5f4885: Pull complete
eed4d080e85e: Pull complete
4576c2187d10: Pull complete
980f93c41065: Pull complete
c5b682398748: Pull complete
c5b682398748: Pulling fs layer
2557373f5bdd: Already exists
7905a4b7e832: Already exists
65384c160d5c: Already exists
Digest: sha256:58688906e168cacde8f56e8266c0f88a59d693cb21f6689e2ed2b93e20665a32
Status: Downloaded newer image for httpd:latest
删除 镜像
docker rmi 31f82d53ced4
容器
docker启动的容器列表
docker -ps
交互式
运行
docker run -it centos
在交互式中两种退出
命令:exit 容器停止退出
按键 CTRL+P+Q 容器不停止但是退出交互式
后台:
运行
docker run -d centos
**docker容器后台运行,就必须有一个前台进程 容器运行的明亮如果不是那些一直挂起的命令, top tail 就是会自动退出
容器日志
docker logs -f -t --tail 容器ID
-f 跟随最新的日志打印
-t 是加入时间戳
-- tail 数字 显示最后几行
查看容器内运行的进程
docker top 容器ID
查看容器内部细节
docker inspect 容器ID
json格式的容器细节
进入正在运行的容器并以命令行交互
docker exec -it 容器ID bashShell(就是命令)
在容器中执行的命令 并不进入容器
也可以进入容器中
是在容器中打开新的终端,并且可以启动新的进程
重新进入
docker attach 容器ID
直接进入容器启动命令的终端
从容器内拷贝文件到主机中
docker cp 容器ID:/temp/123.txt /root
拷贝容器中/temp/123.txt 到宿主机的/root中
也可以反向操作
docker 镜像原理:
容器
自定义端口运行
docker run -p 8080:8080 tomcat
随机端口运行
docker run -P tomcat
随机
创建新的镜像
docker commit -a 'stevezong' -m='info' 容器ID 新的Image名称:version
后台运行
加上 -d
docker 容器数据卷
卷就是目录或者文件 存在于一个或多个容器中,由docker 挂在到容器 单不属于联合文件系统 能过绕过 union file system 提供一些用于持续存储或共享鼠键的特性
卷的设计目的就是数据的持久化 完全独立于容器的生存周期, docker 不会在容器删除是删除其挂在的数据卷
数据共享 数据持久化
数据卷可以在容器之间共享或重用数据
卷中的更改可以直接生效
数据卷中的更改不会包含在镜像的更新中
数据卷的生命周期一直持续到没有容器使用它为止
数据卷的添加 两种
直接命令添加
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
查看是否成功
docker inspect
json 有一个 volumes
容器和宿主机 数据共享
容器亭子退出后 主机修改后数据会同步
加权限
docker run -it -v /宿主机绝对路径:/容器内目录:ro 镜像名 只读
DockerFile 添加
根目录 新建mydocker 文件夹并进入
cd /
mkdir mydocker
可以再Dockerfile中使用VOLUME指令来给镜像添加一个后者多个数据卷
File构建
build后生成镜像, 获得一个新镜像
run 容器ID
数据卷容器
容器间传递共享
--volumes-from
docker run -it --name dc01 centos
docker run -it --name dc02 --volumes-from dc01 centos
容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止
docker file
DockerFile 是用来构建Docker镜像的构建文件 是由一系列命令和参数构成的脚本
手动编写一个dockerfile文件当然 必须要符合file的规范
有这个文件后直接dockerbuild 命令执行 获取一个自定义的镜像
run
Centos的 docker file
FROM scratch ## scratch 是所有镜像的父类 类似java中Object类
MAINTAINER The CentOS Project <cloud-ops@centos.org> # 作者 邮箱
ADD c68-docker.tar.xz / #
LABEL name="CentOS Base Image" vendor="CentOS" license="GPLv2" build-date="2016-06-02" #标签 说明
# Default command
CMD ["/bin/bash"]
docker file的解析过程
每条保留字指令必须为大写字母且后面要跟随至少一个参数
指令按照从上到下 顺序执行
#表示注释
每条指令都会创建一个新的镜像层,并对镜像进行提交
docker 从基础镜像运行一个容器
执行一条指令并对容器做出修改
执行类似docker commit的操作提交一个新的镜像层
docker 再基于刚提交的镜像运行一个新容器
执行dockerfile中的下一条指令知道所有指令都执行完成
从应用软件的角度来看Dokcerffile docker镜像 Docker容器分别 代表软件的三个不同阶段
Dockerfile是软件的原材料
Docker镜像是软件的交付品
DOcker容器则可以认为是软件的运行态
Dockerfile面向开发Docker 镜像成为交付标准 Docker 容器则设计部署域运维 三者和1
Dockerfile 需要定义个Dockerfile DOckerfile 定义了进程需要的一切东西Dockerfile 设计的内容包括执行代码或者是文件 环境变量 依赖包 运行时环境动态链接库 操作系统的发行版服务进程和内核进程
当应用进程需要和系统服务和内核进程打交道这是需要考虑 如何设计namespace的权限控制
Docker镜像 在用Dockerfile 定义一个文件之后 docke build 时会产出一个Docker 镜像 当运行Docker镜像时 会真正开始提供服务
Docker 容器容器是直接提供服务的
DockerFIle 保留字指令
FROM
基础镜像 当前新镜像是基于那个镜像的
MAINTAINER
镜像的作者和邮箱
RUN
容器 构建是需要运行的命令
EXPOSE
当前容器对外暴露的端口
WORKDIR
指定在创建容器后 终端默认登陆的进来的工作目录
ENV
用来在构建镜像过程中设置环境变量
ADD
将宿主机目录下的文件拷贝到镜像且ADD 命令会自动处理URL和解压tar压缩包
ADD比COPY强大 是拷贝+解压缩
COPY
类似ADD 拷贝文件和目录到镜像中
将从狗酱上下文目录中原路径的文件/目录复制到新的一层的镜像内的目标路径的位置
VOLUME
容器数据卷,用于数据保存和持久化工作
CMD
指定一个容器启动时要运行的命令
Dockerfile中可以有多个CMD指令,但是只有最后一个生效CMD 会被docker run 之后的参数替换
ENTRYPOINT
指定一个容器启动时要运行的命令
ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数,但是他是追加 并不是替换
ONBUILD
当狗酱一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
Base镜像(scratch)
Docker Hub 中的99%的镜像都是通过在base镜像中安装和配置选哟的软件构建出来的
编写Dockerfile
FROM centos
MAINTAINER stevezong<zong_xuan@126.com>
ENV WORKDIRPATH /usr/local
WORKDIR $WORKDIRPATH
RUN yum -y install vim
EXPOSE 80
CMD echo "build"
CMD echo "success......Ok"
CMD /bin/bash
构建
docker build -f Dockerfile目录 -t 新镜像名字:TAG .
docker build -f /mydocker/Dokcerfile -t my:2.2 .
[root@instance-g0n0qkxg mydocker]# docker build -f /mydocker/Dokcerfile -t my:2.2 .
Sending build context to Docker daemon 2.048 kB
Sending build context to Docker daemon
Step 0 : FROM centos
---> ea4b646d9000
Step 1 : MAINTAINER stevezong<zong_xuan@126.com>
---> Using cache
---> f20d26899816
Step 2 : ENV WORKDIRPATH /usr/local
---> Using cache
---> e0e11157531d
Step 3 : WORKDIR $WORKDIRPATH
---> Using cache
---> 0975ec751fe3
Step 4 : RUN yum -y install vim
---> Using cache
---> 8873f1888215
Step 5 : EXPOSE 80
---> Running in 2c22c6e10801
---> ddc073313f44
Removing intermediate container 2c22c6e10801
Step 6 : CMD echo "build"
---> Running in d16f4a16b34e
---> 49f0a8ec4179
Removing intermediate container d16f4a16b34e
Step 7 : CMD echo "success......Ok"
---> Running in 934d81015ccb
---> 0e04109c9689
Removing intermediate container 934d81015ccb
Step 8 : CMD /bin/bash
---> Running in 35f80b803e1e
---> a29a4de376a1
Removing intermediate container 35f80b803e1e
Successfully built a29a4de376a1
[root@instance-g0n0qkxg mydocker]#
运行新建的镜像
docker run -it my:2.2
列出镜像的变更历史
docker history a29a4de376a1
[root@instance-g0n0qkxg mydocker]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
my 2.2 a29a4de376a1 3 minutes ago 355 MB
tomcat latest 36b736745f36 4 days ago 462.6 MB
nginx latest fc6a3f930cfd 5 days ago 109.1 MB
centos latest ea4b646d9000 11 days ago 200.4 MB
[root@instance-g0n0qkxg mydocker]# docker history a29a4de376a1
IMAGE CREATED CREATED BY SIZE COMMENT
a29a4de376a1 3 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "/bin/b 0 B
0e04109c9689 3 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo \ 0 B
49f0a8ec4179 3 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo \ 0 B
ddc073313f44 3 minutes ago /bin/sh -c #(nop) EXPOSE 80/tcp 0 B
8873f1888215 4 minutes ago /bin/sh -c yum -y install vim 154.6 MB
0975ec751fe3 5 minutes ago /bin/sh -c #(nop) WORKDIR /usr/local 0 B
e0e11157531d 5 minutes ago /bin/sh -c #(nop) ENV WORKDIRPATH=/usr/local 0 B
f20d26899816 5 minutes ago /bin/sh -c #(nop) MAINTAINER stevezong<zong_x 0 B
ea4b646d9000 11 days ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
eb72e5beea78 11 days ago /bin/sh -c #(nop) LABEL org.label-schema.sch 0 B
3993223e10aa 11 days ago /bin/sh -c #(nop) ADD file:fbe9badfd2790f0747 200.4 MB
备注:
批量删除当前正在运行的
docker rm -f $(docker ps -q)