docker 了解 docker compose

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaofanren1111/article/details/81293040

dockers是一个开源的项目,允许应用及其依赖打包、发布和运行,以轻量级方式。 可以理解为轻量级虚拟机。 但是docker不是虚拟机 hypervisor虚拟硬件,在上方创建完全独立的GuestOS Docker有一层DOcker Engine层,利用下方HostOS的namespace,controlgroup来运行应用。Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

  • 1、简化程序:Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。

  • 2、避免选择恐惧症:Docker 帮你 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。

  • 3、节省开支:云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。

安装(mac linux windows ) 在官网下载安装配置

安装docker命令 :

$ sudo wget -qO- https://get.docker.com/ | sh               sudo: guest用户用root权限执行命令

默认情况下不能使用非root用户直接运行Docker命令,将当前用户(your_user)加入docker用户组:

$ sudo usermod -aG docker your_user
docker 命令 可以参考  忽略名词

#docker ps 查看docker进程

#docker run -p 8080:80 -d nginx  启动nginx服务

#docker stop 容器ID 停止服务

#docker cp index.html 177sdafdikdffdd://usr/share/nginx/html

#docker commit -m 'fun' 容器ID nginx-fun  保存改动生成一个新的镜像

#docker images  查看已有镜像

#docker rmi 镜像id 

rm 删除容器

rmi 删除镜像

cp 从host和容器见拷贝文件 commit 保存改动的镜像 (每一个镜像产生的文件都是临时,必须得保存才能在下次启动时才生效)

docker ps 查看当前运行容器

 docker ps -a 查看所有容器

#docker rm 镜像ID  删除镜像

#docker pull  获取镜像

#docker build  创建镜像

Docker daemon:负责各种docker的操作,比如下载docker镜像、运行容器,客户端通过命令与Docker daemon交互。

Registry:互联网的服务,daemon可以和Registry交互,比如拖取image,是所有docker用户共享docker镜像的服务。
 

可以这样理解 docker把镜像拉取后通过run 把镜像运行成容器  我们相当于客户端client,键入docker命令。守护进程daemon接收到客户端的命令并进行处理。比如一个pull镜像的命令,daemon会去registry官方镜像仓库拉取下来一个镜像image。 DOCKER_HOST就是我们处于的那个虚拟机。

mac 下  

Dockerfile创建镜像

#touch Dockerfile

vim Dockfile

FROM alpine:latest

MAINTAINER smilevt

CMD echo "Hello Docker!"

docker build -t hello_docker .

(-t:给个标签,名字叫hello_docker; '.':路径名,把路径下所有内容送给docker engine).

$ docker images hello_docker

$ docker run hello_docker

创建一个ubuntu的镜像

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

总结:

Dockerfile Command FROM RUN ADD COPY CMD EXPOSE WORKDIR MAINTAINER ENV ENTRYPOINT USER VOLUME

镜像分层被存储,dockerfile中每一行都产生一个新层 每个一个命令都是一层,只有容器层是RW,镜像中的各层都是RO

volume 在容器外存储数据,且可被其他容器进行访问  volume可以提供容器与容器之间的共享数据  docker的一种存储技术。volume提供独立与容器之外的持久化存储

Volume

#docker run -d -name nginx-v /user/share/nginx/html nginx  通过-v挂在一个卷

#docker inspect nginx 检查当前容器

关心Mounts,把本地的一个路径映射到容器中

#echo "it's 2018" > index.html

#docker exec it nginx /bin/bash 进入容器中去看一下

#cd /usr/share/nginx/html/

#docker run -p 80:80 -d -v $PWD/html:/usr/share/nginx/hmtl nginx   $PWD是指当前路径的意思

修改当前路径下的index.html,然后访问容器的80端口

关键一下容器

#mkdir data

#docker create -v $PWD/data:/var/mydata --name  data_container ubuntu  如果没有ubuntu镜像会自动下载

#docker run -it --volumes-form data_container ubuntu /bin/bach

#mount

#cd /var/mydata

#touch whaterver.txt

退出容器,查看本地的data目录,一个数据的容器可以被多个其他容器挂在,这样可以实现数据的共享

  1. ¥docker run -v(挂载一个卷) /usr/share/nginx/html nginx

docker inspect nginx 容器内所有信息,包括检查文件映射关系

docker exec -it nginx(容器名字) /bin/bash (进到容器里面去看)

cd /usr/share/nginx/html

2. $ docker run -v $PWD/code:var/www/html nginx

curl ttp://localhost(获取本地服务器上的网页)

3. $ docker run - volumes-from ...

mkdir vol3 创建新的目录

mkdir data

docker create -v $PWD(当前目录)/data/data/var/mydata --name data_container(容器名字) ubuntu(基础镜像)

docker tun -it(交互的方式) --volumes-from data_container ubuntu /bin/bash

mount

touch whatever.txt (创建一个文件)

存有数据的容器可以被多个容器挂载,数据可以共享。

运行镜像之存储 可以做到本地文件与容器服务器的协作 1. 使用 -v 参数 提供存储 存储格式: 机器源存储位置:容器目标位置 2. 使用--volumes-from 使用其他容器创建的存储 docker run --volumes-from exists_container_name image_name(nginx) 注:创建一个容器并提供挂载点(存储点) docker create -v $PWD:/var/data --name container_name image_name(ubuntu)

Docker 持久化存储Volume之二: 本地目录挂载到容器内的数据卷 docker run -v $PWD/code:/var/www/html nginx ps:1.$PWD-shell 命令中本地当前目录的环境变量 2.nginx的配置文件/etc/nginx/conf.d/default.conf中默认的根路径root是/usr/share/nginx/html,所以此处配置容器中的目标路径是/var/www/html并不能在浏览器中打开本地的index.html,需要更改绑定路径或nginx根路径

Registry镜像仓库

术语

host    宿主机

image    镜像   可重复的软件打包

container 容器

registry    仓库  很多镜像的注册仓库

deamon    守护程序 用来和registry 共享,用来接受用户的命令

client 客户端

操作

#docker search whalesay    查询镜像

#docker pull whalesay    拉取镜像

#docker push myname/whalesay    推送镜像

国内仓库 aliyun  时速云 daocloud

docker search 镜像名字 whalesay

docker pull 镜像名字

docker run 镜像名字  cowsay doucker你好!  运行docker镜像

docker tag 镜像名 新镜像名  

docker push 镜像名   共享镜像到仓库

docker login   登录

docker-compose

多容器app

安装:

Mac/Windows:自带

Linux:curl https://github.com/docker/compose...

compose-install-linux 命令:

curl -L https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s )-$(uname -m) > /usr/local/bin/docker-compose  直接将对应平台的程序下载到本地输出成为文件  chmod a+x   ../compose  命令变成可以执行的  所有人可执行    

因为前一次构建失败
第二次构建要清理之前的镜像
docker-compose stop 停止所有运行的组件
docker-compose rm  删除所有停止运行的组件

docker-compose build重新构建 为何第一次没有运行这个呢,因为第一次没有镜像,它会帮做新镜像,这次不会,所以需要手动更新镜像

多APP撘建使用  留作demo  有与需要的小伙伴欢迎留言:

总结;

docker-compose命令    up   down  stop  build   rm  logs   ps     image  volumes  depends_on   ports  command

猜你喜欢

转载自blog.csdn.net/xiaofanren1111/article/details/81293040