docker基础概述总结

docker基础

容器技术 本质上是将程序隔离打包的一个技术
docker 理顺了开发和运维的环境的差异,使得开发和运维可以使用同一个语言沟通
docker和持续集成、微服务、等都是相辅相成的所以流行性比较强。

docker简介

官方解释:docker是一个开源的项目可以用来将任何应用以轻量级容器的形式来打包、来发布和运行
node.js:docker允许一个应用程序及其所有依赖以一种标准的单位来打包

粗糙的理解:docker是一种轻量级虚拟机。
开挂的chroot:chroot对应用程序做了文件系统的分离

docker没有虚拟层这一层,所以会比虚拟机轻量很多、包括程序启动速度、内存都会小很多。:

1 安装docker linux环境

安装docker本身:sudo wget -qO- https://get.docker.com/ | sh 
修改用户的组将imooc用户加入到docker组中:sudo usermod -aG docker imooc  

service docker start#启动docker
service docker stop#停止docker
service docker restart#重启docker

设置docker开机自启动如下:
systemctl enable docker

2 docker 架构 。

docker客户端通过命令、将命令交给docker daemon 来进行操作
daemon可以和registry进行交互、拖取或者push一个image。

docker images 查看本地所有镜像
docker run -p 8080:80 -d nginx  将nginx images本身的80端口映射到本地的8080端口
4518c21154c44257307e0fbd1207f7e1bd98b809ab4d2b538d6f2e8cd5465f22 

docker stop 4518c21154c4 停止docker容器通过指定docker容器id。

再次重新启动nginx 之前拷贝的文件会消失
docker在容器内的改动只是暂时的都是没有被缺省没有被保存下来
要保存需要做另外的操作

docker commit -m 'fff' 6cff4f63f072 使用docker保存了一个新的改动产生了一个新的image
docker commit -m 'fff' 6cff4f63f072 nginx-fff 指定image的名称
docker rmi 0ac59d9f61bb 通过imagesid删除images

删除已启动过的镜像需要先删除容器。

docker ps -a 找到镜像产生的容器,列出所有的容器。
docker rm c3384a68118c 通过容器id删除容器
之后再删除镜像
docker rmi ec12d17c4106

3 Dockefile

通过编写简单的文件自创docker镜像

from alpine:latest               alpine是一个专门针对docker的一个极小的一个linux这么的一个环境image会非常的小
maintainer xbf
cmd echo 'hello docker'
docker build -t hello_docker .
-t:的意思是给镜像的名称
. 指的是将该路径下的所有内容给docker引擎,让其产生images
Dockerfile2
FROM ubuntu
MAINTAINER xbf   声明当前用户
RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
RUN  apt-get update
RUN  apt-get install -y nginx
COPY index.html /var/www/html
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
EXPOSE 80

docker build -t xbf/hello-nginxs .
//dockerfile 语法
FROM  指定基础镜像 base image
RUN 执行命令
ADD 添加文件
COPY 拷贝文件
CMD 执行命令
EXPOSE 暴露端口

WORKDIR  指定路径
MAINTAINER 维护者
ENV 设定环境变量
ENTRYPOINT 容器入口
USER 指定用户
VOLUME mount point 指定容器所挂载的卷

4 docker镜像分层

docker存储技术里面比较重要的一个概念镜像是分层被存储的。而不是作为一个整个的一个文件被存储的
Dockerfile中的每一行都会产生一个新层,每一层都有一个独立的id

FROM alpine:latest               4E38E38C8CE0
MAINTAINER xbf				     fb1aabf4427b
CMD echo 'hello docker'			 3df065bfdff6

镜像分层好处

产生镜像之后在镜像中已存在的层都是只读的,一旦一个image被运行产生一个容器的话会产生一个新层
container layer rw 容器层可读可写的,保证了容器是可以被改变的。
分层的好处,是不同的image 可能一个有10层 一个有5层,可能有5层是共享的。无形中存储压力就小很多。

5 Volume

提供独立于容器之外的持久化存储 Volume:卷
docker在容器内的改动只是暂时的都是没有被缺省没有被保存下来
volume提供了一个方便的可以持久化存储的一个技巧。
volume可以提供给容器和容器之间的共享的数据

docker run -v /usr/share/nginx/html nginx  运行一个nginx容器通过-v 挂载一个卷

docker run -d --name nginx -v /usr/share/nginx/html nginx

docker inspect nginx
会打印出如下
"Mounts": [
            {
                "Type": "volume",
                "Name": "a5ba675659370889237de9d051aa757c6d71f0f56d181ced866f7a6de567a0da",
                "Source": "/var/lib/docker/volumes/a5ba675659370889237de9d051aa757c6d71f0f56d181ced866f7a6de567a0da/_data",
                "Destination": "/usr/share/nginx/html",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],

		source:对应的实际服务器的目录位置
		Destination:目的地,终点,挂载到docker中的这个位置
		将宿主机中的source挂载到了容器内部的Destination地址
		
docker exec -it nginx /bin/bash 这个命令可以进入到容器中去
修改宿主机中的文件则被挂载容器的文件也会相应发生改变。
//挂载第二种数据卷
docker run -v $PWD/code:/var/www/html nginx 本地的一个目录来挂载到容器里面的一个数据券里面去
//挂载第三种数据卷 创建一个仅有数据的一个容器,并将这个容器当做一个volume挂载到其他容器里面去。
docker run  --volumes-from
docker create -v $PWD/data:/var/mydata --name data-containers ubuntu
使用Ubuntu基础镜像创建一个充当数据卷的容器。
docker run -it  --volumes-from data-containers ubuntu /bin/bash
-it 和/bin/bash 配合使用采用交互的方式可以直接进入到容器中

仅有容器的数据卷可以被多个容器所挂载。做到数据可以共享。

6 Registry 镜像仓库

registry:注册
docker search whalesay 从registry搜索whalesay镜像
docker pull whalesay
docker push myname/whalesay

仓库:
dockerHub 
国内:
daocloud
时速云
aliyun

7 docker-compose

多容器app mac和windows自带compose不需安装 linux需要安装


linux安装:curl -L https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s) -$(uname -m) > /usr/local/bin/docker-compose
或者:
sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

uname -s 返回的是Linux
uname -m 返回的是x86_64
这两个字符串会被加在上面的url中去。

ls -l /usr/lcoal/bin/docker-compose 
chmod a+x /usr/lcoal/bin/docker-compose 让所有人都可以执行这个文件。
docker-compose -version 查看版本


8 docker-compose实战:


使用3个容器 nginx(接入层)  ghost app(业务逻辑层)  mysql (数据层)
yml使用缩进的方式表示层级之间的关系。

ghost 文件夹下
Dockerfile
FROM ghost
COPY ./config.js /var/lib/ghost/config.js
EXPOSE 2368
CMD ["npm","start","--production"]
 
docker-compose up -d  如果之前没有进行则会自动帮助构建
up是拉起来
-d是把所有的程序以daemon的形式运行。

否则需要 docker-compose build 重新构建然后再 docker-compose up -d 

使用docker-compose 可以将多个容器通过依赖的形式逐个构建。多容器app。

//docker-compose.yml常用命令
build 本地创建镜像
command 覆盖缺省命令
depends_on 连接容器
ports 曝露端口
volumes 卷
image  pull镜像

up 启动服务
stop 停止服务
rm 删除服务中的各个容器
logs 观察各个容器的日志
ps 列出服务相关的容器
  1. 如何制作镜像
  2. 如何制作镜像
  3. 如何持久化容器数据
  4. 如何编排一个多容器的app

9 docker查缺补漏

1 docker快速删除所有未运行的容器
sudo docker rm $(sudo docker ps -a -q)

2 查看docker磁盘占用情况
docker system df 

3 docker system prune
用于清理磁盘,删除关闭的容器,无用的数据券和网络,
以及dangling镜像(即无tag的镜像)

4 清理docker 
/var/lib/docker/overlay2占用磁盘太大。
引用链接:
https://www.jianshu.com/p/7992cca95e9c

5 解决删除镜像时image is referenced in multiple repositories
当使用镜像id删除镜像失败的时候可能是 一个镜像指向了多个仓库,
所以可以使用仓库名来删除。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值