您的位置:首页 > 运维架构 > Docker

DOCKER笔记(1)

2015-11-16 14:53 567 查看
Docker:

先说缺点:

Docker是基于Linux 64bit的,没有window的。

网络管理方面比较简单。

云端的容器安全性有待考证。

容器随着用户进程的停止而销毁,容器中的log等用户数据不便收集。

特点:

轻量级虚拟机,是针对应用程序层次的虚拟机。

做好对应镜像 启动像是按钮一样,随开随关。

可以挂载主机的文件夹。

由于消耗小,利于集群搭建。

安装配置

CentOS7 系统 CentOS-Extras 库中已带 Docker,可以直接安装:

$ sudo yum install docker

安装之后启动 Docker 服务,并让它随系统启动自动加载。

$ sudo service docker start

$ sudo chkconfig docker on

配置/etc/sysconfig/docker 添加 (docker pull的时候有可能下载不了其他网站的镜像)

OPTIONS=’–selinux-enabled –insecure-registry dl.dockerpool.com:5000’

OPTIONS=’–selinux-enabled –insecure-registry /dockerfile/’

镜像获取

共两种方法 :别人做好的镜像拖下来,再就是用dockerfile文件直接自定义配置镜像。

镜像:

命令 : docker pull (从docker官方下载镜像),docker pull 后面添加镜像地址。

示例:docker pull unbuntu (从docker官网下载)

docker pull dockerfile/Ubuntu (从dockerfile仓库下载)

有关docker镜像的操作查看:

查看镜像: docker images

镜像更新:

通过镜像 docker run -i -t mysql /bin/bash 进入shell

安装软件包:Apt-get update apt-get install openssh-server

mkdir /var/run/sshd

passwd

exit

此时容器已经关闭。

镜像更新:

docker commit 51774a81beb3 mysql:latest 更新原来的镜像 id 是通过docker ps查看。

再通过运行sshd启动容器

docker run -d -p 22 -p 3306:3306 mysql /usr/sbin/sshd –D

查看 docker 查看随机端口 0.0.0.0:32768->22/tcp,

通过工具连接虚拟机

dockerfile镜像文件:

比较实用的dockerfile文件下载网站 https://github.com/dockerfile

从dockerfile文件来创建镜像方法:

Wget https://codeload.github.com/dockerfile/ubuntu/zip/master unbuntu镜像

wget https://codeload.github.com/dockerfile/mysql/zip/master mysql的镜像dockerfile

通过 dockerfile 创建镜像 docker build -t mysql . (dockerfile 文件位置)

镜像中的from 改成 FROM dockerfile/Ubuntu

dockerfile文件解析 详见http://blog.csdn.net/wsscy2004/article/details/25878223

```
#
# 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
```


这里说一点:Dockerfile 中RUN命令是执行docker build 做镜像跑的命令,CMD命令是docker run 起容器的时候跑的命令

http镜像起容器:

安装httpd镜像:

下载 wget https://codeload.github.com/docker-library/httpd/zip/master

解压 修改 dockerfile文件中的FROM dockerfile/Ubuntu

在dockerfile目录下运行 docker build -t httpd .

安装 httpd镜像

docker run -d -p 80:8080 --name httpd --link mysql10:httpd httpd


容器

容器是从镜像创建的运行实例,相当于aws的实例一样,但容器是一个相当简易的linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。当你启动一个容器时,在容器里面ps -ef 就能看到你运行的应用程序进程。

容器启动

docker run [参数] 镜像文件

示例:启一台mysql镜像:

docker run -d –name mysql -p 3306:3306 mysql:latest (默认root 没密码 )

-d 后台守护运行 –name 取一个名字 -p 端口映射(主机接受的3306转发到容器的3306)

如果 docker run的时候最后面接的命令/bin/bash,创建完容器就直接进入到容器里面。但是你exit退出shell的时候这个容器就会停止了。更多的时候,需要让 Docker 容器在后台以守护态(Daemonized)形式运行,就得加上 -d 再加 类型于/usr/sbin/sshd –D这种后台进程。

容器的查看:

docker ps 查看正在运行的容器



id 用来进入 删除 停止。

容器的停止删除:

Docker stop id 来停止容器,通过docker ps -a 来查看停止的容器,通过docker rm id 来删除停止容器。

删除大量停止的docker容器:

$ docker      rm      $(docker      ps      -a -q)


容器的进入:

官方容器进入的步骤比较繁琐,可以通过写入shell脚本中来做一个命令。再通过 docker-enter id 来进入容器中。

vi /usr/bin/docker-enter

#!/bin/sh

if [ -e $(dirname "$0")/nsenter ]; then
# with boot2docker, nsenter is not in the PATH but it is in the same folder
NSENTER=$(dirname "$0")/nsenter
else
NSENTER=nsenter
fi

if [ -z "$1" ]; then
echo "Usage: `basename "$0"` CONTAINER [COMMAND [ARG]...]"
echo ""
echo "Enters the Docker CONTAINER and executes the specified COMMAND."
echo "If COMMAND is not specified, runs an interactive shell in CONTAINER."
else
PID=$(docker inspect --format "{{.State.Pid}}" "$1")
if [ -z "$PID" ]; then
exit 1
fi
shift

OPTS="--target $PID --mount --uts --ipc --net --pid --"

if [ -z "$1" ]; then
# No command given.
# Use su to clear all host environment variables except for TERM,
# initialize the environment variables HOME, SHELL, USER, LOGNAME, PATH,
# and start a login shell.
"$NSENTER" $OPTS su - root
else
# Use env to clear all host environment variables.
"$NSENTER" $OPTS env --ignore-environment -- "$@"
fi
fi


通过 docker-enter id 来进入容器中

数据卷

数据卷的好处:可以挂在宿主的文件夹当做数据卷,并且可以多容器挂载统一数据卷。

数据卷的使用类似于linux的mount。

创建数据卷

在用 docker run 命令的时候,使用 -v 标记来创建一个数据卷并挂载到容器里。在一次 run 中多次使用可以挂载多个数据
945b
卷。

$ sudo docker run -d -P --name web -v /webapp training/webapp python app.py


挂载主机目录作为数据卷

$ sudo docker run -d -P --name mysql -v /opt:/opt mysql


容器之间通信

示例:

1,准备 先做好镜像

2,先启动数据库

docker run –name db001 -e MYSQL_ROOT_PASSWORD=admin -d -p 3306:3306 mysql

3,再启动应用类镜像

docker run -d -p 80:8080 –name tomcat001 –link db001:tomysql tutum/tomcat:8.0

–link @1:@2 @1表示要连接的数据库 @2 这个连接的别名
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  docker