分享

docker学习笔记

 jas0n_liu 2018-05-22
1、docker架构
docker daemon(docker进程):负责职称docker container的运行以及本地images的管理。
dokder client:用户通过docker client访问docker,docker client提供pull、run等命令。
docker images:镜像---一个只读的模板,可以用来创建docker容器。docker提供了一个很简单的机制来创建镜像或者更新先有的镜像,用户甚至可以直接从其他人那里下载一个制作好的镜像来直接使用。
docker container:docker利用容器来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

2、安装docker
官方建议使用Ubuntu,本人使用centos7。
#yum install -y docker  安装命令
#docker version  查看版本,包含server和client
#systemctl daemon-reload   重新载入systemd
#systemctl start docker    启动docker

3、镜像
docker运行容器前需要本地存在对应的镜像,如无,docker会尝试先从默认的镜像仓库(默认使用docker hub公共注册服务器中的仓库)下载镜像。用户也可以通过配置使用自定义的镜像仓库。  http://hub.
获取镜像
#docker pull redis:3.0 在镜像仓库查找需要的redis版本,不加版本号,默认下载最新版
#docker images    查看镜像
#docker rmi a8a59477268d(id)  删除镜像
注意:删除镜像前,需要删除所有使用此镜像的容器。
#docker search redis

4、容器
容器是镜像的一个运行实例,所不同的是,它有额外的可写文件层。如果认为虚拟机是模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。那么docker容器就是独立运行的一个或一组应用,以及他们的必须运行环境。
#docker ps    查看运行的容器列表
#docker ps -a  查看所以容器
# docker create --name redis -p 16379:6379 redis:3.0 只创建,不启动
参数:-i 标准输出
--name 容器名称
-p   指定端口 16379:6379  16379是主机端口,6379是容器对外端口  
     -t   让docker分配一个伪终端,并绑定到容器的标准输出上
#docker start redis(容器名或id) 启动容器
docker create创建容器,docker start启动容器,这种方法不常用。
而是使用docker run命令,创建并启动容器
# docker run  --name redis1 -p 16380:6379 redis:3.0  直接启动redis
参数:-d 后台运行
#docker rm reids1(容器名或id)
#docker stop redis(容器名或id)
#docker kill redis(容器名或id)

5、进入容器
有时候需要进入容器内部做一些操作,如修改配置文件。
命令docker exec
#docker exec -it redis1 /bin/bash(进入容器的第一个命令)  
参数:-i 打开容器的标准输入
    -t 伪终端
ctrl+D退出容器
查看容器启动日志
# docker logs -f redis1

6、仓库repository
一个容易与之混淆的概念就是注册服务器registry。实际上注册服务器是存放仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下有多个镜像。从这方面说,仓库可以被认为是一个具体的项目和目录。例如对于仓库地址dl.dockerpool.com/ubuntu来说,dl.dockerpool.com是注册服务器地址,ubuntu是仓库名。
阿里云仓库
https://cr.console.aliyun.com/#/imageList

将镜像推送到registry:

  $ sudo docker login --username=jasoliu060121 registry.cn-hangzhou.aliyuncs.com 登陆阿里云账号
  $ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/jason_liu/myredis:[镜像版本号]  本地镜像打标签
  $ sudo docker push registry.cn-hangzhou.aliyuncs.com/jason_liu/myredis:[镜像版本号]

7、数据管理
容器在运行项目时会产生数据,比如运行的是mysql容器,那么一定有数据的产生,那么问题来了,数据是保存在容器内部还是外部?
如果将数据保存着容器内部,那么也就意味着我们改变了原有镜像,这种做法是不可取的,因为在后期的镜像升级将变得不可能。也就是说运行的镜像,最好不要改变,如果必须改变的(如修改配置文件),在改变后记得commit提交打成一个新的镜像。
显然,应该讲数据保存在容器的外部,也就是保存在主机上,那么容器该如何读取数据呢?
在create或run容器时,可以通过-v参数指定主机的目录,挂载到容器的某一个目录上,这样,容器就可以在这个目录读写数据了,从而实现容器和数据的分离。以mysql为例
# docker create --name percona -v /var/mysql-data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root percona:5.6  创建容器
参数:-v  /var/mysql  本机目录  /var/lib/mysql 容器目录
   -p  端口
   -e  指定用户名密码
# docker start percona     启动容器
连接数据库创建库-表后,查看本机目录下生成了数据文件,实现了容器和数据分离。

8、构建镜像
dockfile文件,编写多条命令,描述了一个镜像构建细节。 分为四部分组成:基础镜像信、维护者信息、镜像操作指令和容器启动时执行指令。

#第一行必须指令基于的基础镜像 From ubutu #维护者信息 MAINTAINER docker_user docker_user@mail.com #镜像的操作指令 apt/sourcelist.list RUN apt-get update && apt-get install -y ngnix RUN echo "\ndaemon off;">>/etc/ngnix/nignix.conf #容器启动时执行指令 CMD /usr/sbin/ngnix


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多