副本集设置

主节点负责读写

读取备份节点需要设置“setSlaveOk”标识(连接中设置,不是在数据库中设置)

自动故障转移(automatic failover) 主节点挂了,其中一个备份节点自动选为主节点

docker 分享稿

docker常用的三个组件

为什么? 快,小

三个组件:images、container、registry

images:模板 container:运行 registry:git hub类型

docker.png 图片

ubuntu系统上:

/var/lib/docker 目录内容多

docker images记录什么信息?

存放在 /var/lib/docker/graph/

> json 保存着关于镜像的元数据
> layer  文件夹,保存rootfs该容器的镜像(迁移至/var/lib/docker/aufs/mnt/CONTAINERID)
> layersize 一个整数,表示layer的大小

docker daemon 和docker client

用户通过docker client与docker daemon通信,发送请求给后者。daemon有两部分:Server与Engine。Server用户通信部分,Engine用于执行接收到的请求。run,start,stop,rm等等。 docker client就是我们用到的docker run,info,inspect等等。

/etc/default/docker 文件: 三种方式: tcp://host:port, unix:///path/to/socket, fd://* 或fd://socketfd(-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock” fd)

–insecure-registry dreg:5000 设置本地registry

docker run -d 已守护进行的形式运行

docker ubuntu bash实例以及nami-service实例

docker exec 命令 /var/lib/docker/aufs/mnt/

在运行中的容器内,运行一个新的操作。容器重启,该操作不会重启。docker exec这个操作仅仅当容器的主要进程 PID 1在运行时,才适用。如果容器paused,会等到容器unpaused再运行。

pause和stop的区别: pause:用cgroups freezer 冻结(suspend)容器中的所有进程。SIGSTOP

stop:容器中的主要进程将接收SIGTERM,在宽限期后,SIGKILL.

有两个信号可以停止进程:SIGTERM 和 SIGKILL。 SIGTERM比较友好,进程能捕捉这个信号, 根据您的需要来关闭程序。在关闭程序之前,您可以结束打开的记录文件和完成正在做的任务。 在某些情况下, 假如进程正在进行作业而且不能中断,那么进程可以忽略这个 SIGTERM信号。对于SIGKILL信号,进程是不能忽略的。

其他

1,commit container 的时候,volume的内容不会复制到image中 2,CMD与ENTRYPOINT区别:

实例: ####### CMD CMD [“/bin/echo”,”this is a echo test”]

build后运行,docker run XXX,就输出:this is a echo test.

docker run命令会覆盖CMD的参数;比如docker run -it ubuntu /bin/bash中的/bin/bash会覆盖/bin/echo "this is aecho test".

docker run XXX /bin/bash.则不会输出“this is a echo test”.

FROM ubuntu CMD [“echo”] docker run imagename echo hello –> hello

####### ENTRYPOINT ENTRYPOINT 让容器功能表现得想一个可执行的程序

ENTRYPOINT [“/bin/echo”]

build出来的容器就像一个/bin/echo 程序:比如build的镜像叫YYY docker run -it YYY “this is a test”

就会输出“this is a test”字符串。

FROM ubuntu ENTRYPOINT [“echo”] docker run imagesname echo hello –> echo hello

注意1:ENTRYPOINT的ENTRYPOINT command param1 param2 (shell form)模式会屏蔽掉docker run后面加的命令和CMD的参数

3,CMD和RUN的区别 RUN 在新的一层执行任何操作,这些操作的结果适用于下一层,并最终commit到结果image中。比如:需要创建一个已经安装了java和mysql的ubuntu 镜像,则可以以ubuntu为baseimages,然后使用RUN命令来安装java和mysql。 CMD 为正在执行的container提供默认值(main purpose is to provide defaults for an executing container)。比如:mysql的镜像,希望每次启动mysql的镜像时,service start的。

官方mysql的dockerfile:

    #

    # MySQL Dockerfile

    #

    # https://github.com/dockerfile/mysql

    #


    # Pull base image.

    FROM dockerfile/ubuntu

    # Install MySQL.

    RUN \

      apt-get update && \

      DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server && \

      rm -rf /var/lib/apt/lists/* && \

      sed -i 's/^\(bind-address\s.*\)/# \1/' /etc/mysql/my.cnf && \

      sed -i 's/^\(log_error\s.*\)/# \1/' /etc/mysql/my.cnf && \

      echo "mysqld_safe &" > /tmp/config && \

      echo "mysqladmin --silent --wait=30 ping || exit 1" >> /tmp/config && \

      echo "mysql -e 'GRANT ALL PRIVILEGES ON *.* TO \"root\"@\"%\" WITH GRANT OPTION;'" >> /tmp/config && \

      bash /tmp/config && \

      rm -f /tmp/config

    # Define mountable directories.

    VOLUME ["/etc/mysql", "/var/lib/mysql"]

    # Define working directory.

    WORKDIR /data

    # Define default command.

    CMD ["mysqld_safe"]

    # Expose ports.

    EXPOSE 3306

tomcat 官方文档

FROM java:7-jre

ENV CATALINA_HOME /usr/local/tomcat
ENV PATH $CATALINA_HOME/bin:$PATH
RUN mkdir -p "$CATALINA_HOME"
WORKDIR $CATALINA_HOME

# see https://www.apache.org/dist/tomcat/tomcat-8/KEYS

RUN gpg --keyserver pgp.mit.edu --recv-keys \

  05AB33110949707C93A279E3D3EFE6B686867BA6 \

  07E48665A34DCAFAE522E5E6266191C37C037D42 \

  47309207D818FFD8DCD3F83F1931D684307A10A5 \

  541FBE7D8F78B25E055DDEE13C370389288584E7 \

  61B832AC2F1C5A90F0F9B00A1C506407564C17A3 \

  79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED \

  80FF76D88A969FE46108558A80B953A041E49465 \

  8B39757B1D8A994DF2433ED58B3A601F08C975E5 \

  A27677289986DB50844682F8ACB77FC2E86E29AC \

  A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 \

  B3F49CD3B9BD2996DA90F817ED3873F5D3262722 \

  DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 \

  F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE \

  F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23

ENV TOMCAT_MAJOR 6
ENV TOMCAT_VERSION 6.0.43
ENV TOMCAT_TGZ_URL https://www.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz

RUN curl -SL "$TOMCAT_TGZ_URL" -o tomcat.tar.gz \

  && curl -SL "$TOMCAT_TGZ_URL.asc" -o tomcat.tar.gz.asc \

  && gpg --verify tomcat.tar.gz.asc \

  && tar -xvf tomcat.tar.gz --strip-components=1 \

  && rm bin/*.bat \

  && rm tomcat.tar.gz*

EXPOSE 8080
CMD ["catalina.sh", "run"]

4,docker attach CONTAINER

(lets you view or interact with any running container’s primary process)

5,docker exec

Examples

$ sudo docker run --name ubuntu_bash --rm -i -t ubuntu bash

This will create a container named ubuntu_bash and start a Bash session.

$ sudo docker exec -d ubuntu_bash touch /tmp/execWorks

This will create a new file /tmp/execWorks inside the running container ubuntu_bash, in the background.

$ sudo docker exec -it ubuntu_bash bash

This will create a new Bash session in the container ubuntu_bash.

6,volume保存config.json信息,vfs是真正volume的内容

7,VOLUME vs -v

-v:将挂载宿主机上的文件到container中;VOLUME则在宿主机上创建一个新的空的挂载文件,然后将将挂载到container中。

container之间共同share一个挂载文件则可以通过--volumes-from操作。

8,脚本运行生成mysql

~/liumq/test.sql

create database docker_test;
use docker_test;
create table app_info(name varchar(20));

mysql < ~/liumq/test.sql

进入mysql >,show database 可以看到docker_test已经创建。

在dockerfile添加该功能?

dockerfile中如何设置mysql特定的 -u -p

进入 mysql:docker run -i -t –name mysql -e MYSQL_ROOT_PASSWORD=nami -p 3307:3306 mysql_1231:0.0.1 /bin/bash 用:mysql -uroot -pnami -h172.17.42.1 -P3306 进入mysql命令

http://stackoverflow.com/questions/25920029/setting-up-mysql-and-importing-dump-within-dockerfile

9.总结

docker中永久性的数据只能通过volume或者ADD/COPY到image中,尝试的在dockerfile增加运行数据脚本行不通。