广告

本站里的文章大部分经过自行整理与测试
显示标签为“Docker”的博文。显示所有博文
显示标签为“Docker”的博文。显示所有博文

2017年4月10日星期一

Linux - SQL Server (docker)

  • 还没有数据库
$ docker run --name mssql -e ACCEPT_EULA=Y -e SA_PASSWORD=Yukon900 -p 1433:1433 -d microsoft/mssql-server-linux
$ docker exec -it mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Yukon900

  • 已有数据库 DemoData  (建议用这个)
$ git clone https://github.com/twright-msft/mssql-node-docker-demo-app.git
$ docker build -t node-web-app .

$ docker run --name mssql -e ACCEPT_EULA=Y -e SA_PASSWORD=Yukon900 -p 1433:1433 -p 8080:8080 -d node-web-app
$ docker exec -it mssql /bin/bash /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Yukon900

http://localhost:8080

可以下载 DBeaver 连接 MSSQL

http://dbeaver.jkiss.org/

Host: localhost
Port: 1433
Username: sa
Password: Yukon900

2017年4月8日星期六

Eclipse Che 服务端


服务端安装了 Eclipse Che
只要能上网, 到哪里都可用浏览器连接上服务端 Eclipse, 继续编写与开发程序

https://www.eclipse.org/che/docs/setup/getting-started/

1) Docker 安装

http://jasonmun.blogspot.my/2016/05/linux-docker.html

2) 测试 Docker

$ su
$ systemctl status docker
$ docker info
$ docker run hello-world

3) 准备数据存放位置和端口

$ mkdir /home/username/eclipse_data

防火壁要将以下端口打开

8080 - Tomcat 端口
8000 - 服务端 Debug 用, 
32768-65535 间 - Docker 和 Eclipse Che 代理用

4) 安装与开启 Eclipse Che 服务

$ docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock -v /home/username/eclipse_data:/data -e CHE_HOST=192.168.0.100 eclipse/che start

如启动不了, 用这行检查 (也可以暂时关闭防火壁作测试)..
$ docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock -v /home/username/eclipse_data:/data -e CHE_HOST=192.168.0.100 eclipse/che info --network

5) 从服务端浏览 http://172.17.0.1:8080/ 或 客户端浏览 http://192.168.0.100:8080/

6) 其它

$ docker run <DOCKER_OPTIONS> eclipse/che stop
$ docker run <DOCKER_OPTIONS> eclipse/che restart
$ docker run <DOCKER_OPTIONS> eclipse/che:<version> start

如果在 Windows 用 boot2docker, 可将系统变数 `%userprofile%` 设置为 `:/data`
$ docker run <DOCKER_OPTIONS> -v /c/Users/username/che:/data eclipse/che start

2016年12月11日星期日

Docker - ownCloud


https://hub.docker.com/r/owncloud/server/

$ docker run -d --name redis_server -e REDIS_OPTS="--protected-mode no" webhippie/redis:latest
$ docker run -d --name mariadb_server -e MARIADB_USERNAME=root -e MARIADB_ROOT_PASSWORD=secret webhippie/mariadb:latest

$ docker run --name owncloud -it --link mariadb_server:mariadb --link redis_server:redis -d -p 443:443 owncloud/server:latest

浏览 ( 因用 SSL, 要将 localhost 加入 exception 才能浏览 )

https://localhost

( ownCloud 的管理员户口与密码 - admin / password )

2016年7月20日星期三

Docker - Hadoop 2.7.1

通过 docker 来安装 hadoop 平台

https://hub.docker.com/r/sequenceiq/hadoop-docker/

# 下载与运行 hadoop 2.7.1 平台
$ docker run --name hadoop271 -it sequenceiq/hadoop-docker:2.7.1 /etc/bootstrap.sh -bash

# /usr/local/hadoop

$ cd $HADOOP_PREFIX

# 运行 mapreduce - grep 例子
# 资料 input 已准备好在 hdfs
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar grep input output 'dfs[a-z.]+'

# 运行 mapreduce - wordcount 例子
$ mkdir input2
$ cd input2
# 在 txt 写些英文句子, 其中有些字重复
$ vi test1.txt
$ vi test2.txt
$ cd ..
# 先将资料 input2 放进 hdfs 
$ bin/hadoop fs -put input2/ /user/root
# 查看输入

$ bin/hadoop fs -ls /user/root/input2 
# 运行
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar wordcount input2 output


# 查看输出
$ bin/hadoop fs -cat /user/root/output/*

$ bin/hdfs dfs -cat output/*

# 撤除输出
$ bin/hadoop fs -rmr /user/root/output

# 进入已开启的 hadoop271
$ docker exec -it hadoop271 bash

2016年6月30日星期四

2016年5月24日星期二

Docker - Tomcat

https://registry.hub.docker.com/_/tomcat/

$ docker run --name tomcat_server -d -p 8080:8080 tomcat:8.5.2-jre8


# 复制这个文件

$ docker cp tomcat_server:/usr/local/tomcat/conf/tomcat-users.xml /home/用户名

$ gedit /home/用户名/tomcat-users.xml

# 在里面添加
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="admin-gui,manager-gui"/>

$ cd /home/用户名
$ mkdir docker_tomcat
$ mv tomcat-users.xml docker_tomcat

$ cd docker_tomcat

$ gedit Dockerfile

FROM tomcat:8.5.2-jre8

COPY tomcat-users.xml /usr/local/tomcat/conf/

# 编译成镜像 tomcat_conf

$ docker build -t tomcat_conf .

# 撤除容器
$ docker stop tomcat_server
$ docker rm tomcat_server


# 运行容器
$ docker run --name tomcat_server -d -p 8080:8080 tomcat_conf 

http://127.0.0.1:8080

2016年5月21日星期六

Windows - Docker 安装

Windows 版的 Docker

https://www.docker.com/products/docker-toolbox
https://github.com/docker/toolbox/releases/download/v1.11.1b/DockerToolbox-1.11.1b.exe

https://training.docker.com/self-paced-training

Windows 版 VirtualBox 运行 Linux, Docker 才能运行 (毕竟 Docker 出自 Linux),
之后你可以选择用有界面的 (Kitematic) 或直接用 docker 指令输入 (Terminal),
但发觉 Kitematic 并没有提示镜像是可以自己编译的,
所以, 我觉得花点时间学 docker 指令是必要的 

Linux - Docker 安装

Ubuntu

$ su
$ apt-get install curl
$ apt-get install docker.io


Linux Mint 18

$ su
$ apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

$ gedit /etc/apt/sources.list.d/docker.list

# Ubuntu Xenial (16.04)

deb https://apt.dockerproject.org/repo ubuntu-xenial main

$ apt-get update
$ apt-get purge lxc-docker

# apt-get install linux-image-extra-$(uname -r)
$ apt-get install docker-engine 


Fedora 23

$ su
$ dnf update -y
$ dnf -y install docker-io
 

CentOS 7
 

$ su

$ yum install docker



# 安装较新版的 docker

$ gedit /etc/yum.repos.d/docker.repo

[virt7-docker-common-candidate]
name=virt7-docker-common-candidate
baseurl=http://cbs.centos.org/repos/virt7-docker-common-candidate/x86_64/os/
enabled=1
gpgcheck=0 


$ yum install docker --disablerepo=extras 

安装后..

# 将 username 加入, 让这个 ID 可以运行 docker
$ usermod -aG docker username


$ groupadd docker
$ gpasswd -a ${USER} docker
$ service docker restart 
 


$ systemctl start docker
$ systemctl enable docker


# 查看 docker 状况
$ systemctl status docker

# 关闭 docker
$ systemctl disable docker
$ systemctl stop docker  

Docker - PHP + memcached

Ubuntu - Docker - Nginx / PHP / MySql
http://jasonmun.blogspot.my/2016/05/ubuntu-docker-nginx-php-mysql.html

在弄 php-fpm-mysql 镜像的时候,
Dockerfile 文件中添加安装 memcached 模块

\
&& apt-get install -y libmemcached-dev \
&& pecl install memcached \
&& docker-php-ext-enable memcached

https://hub.docker.com/_/memcached

# 启动容器
$ docker run --name memcached-ct -d -p 11211:11211 memcached:1.4.25


# 如果是之后添加的, php-fpm-mod 和 nginx_server 都要撤除与重启
$ docker stop php-fpm-mod
$ docker rm php-fpm-mod
$ docker run --name php-fpm-mod --volumes-from wwwroot --link mysql_server:mysql -d php-fpm-mysql
$ docker stop nginx_server
$ docker rm nginx_server
$ docker run --name=nginx_server --volumes-from wwwroot --link php-fpm-mod:php -p 80:80 -d nginx-fix

# 进入容器 php-fpm-mod 中
$ docker exec -it php-fpm-mod bash
$ php -m   # 可以找到 memcached 模块

# 测试
$ telnet 192.168.247.128 11211

Trying 192.168.247.128...
Connected to 192.168.247.128.
Escape character is '^]'.
set id 0 0 4
1234
STORED
get id
VALUE id 0 4
1234
END

quit
 

PHP 代码 
<?php
    $memcache = new Memcache;
    $memcache->connect("192.168.247.128",11211);

    echo "Server's version: " . $memcache->getVersion() . "<br />\n";

    $testArray = array('horse', 'cow', 'pig');
    $tmp = serialize($testArray);

    $memcache->add("key", $tmp, 30);

    echo "Data from the cache:<br />\n";
    print_r(unserialize($memcache->get("key")));
?>

2016年5月20日星期五

Ubuntu - Docker - Nginx / PHP / MySql + phpmyadmin

1. mysql_data 和 wwwroot 
(用这可以避免当 mysql 更换时, 再输入资料)

https://hub.docker.com/_/busybox/

$ docker run --name=mysql_data -v /var/lib/mysql -d busybox echo MySQL Data
$ cd /home/用户名
$ mkdir www
$ docker run --name=wwwroot -v /home/用户名/www:/var/www/html -d busybox echo wwwroot


* 这 2 个容器不需要开启, 因它们只是用作挂载主机的文件夹到容器中而已

2. Mysql Server 5.5 (3306/tcp)

https://hub.docker.com/_/mysql/

# mysql - 设置密码
$ docker run --name=mysql_server --volumes-from mysql_data -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.5
# mysql - 设置空密码
$ docker run --name=mysql_server --volumes-from mysql_data -e MYSQL_ALLOW_EMPTY_PASSWORD=1 -d mysql:5.5

# 进入容器 mysql
$ docker exec -it mysql_server bash

$ mysql -uroot -p123456


mysql> create database test_db;
mysql> create table student (name VARCHAR(20), age INT(10));
mysql> insert into student (name, age) values ("Andrew", "40"); 
mysql> quit

$ exit  # 退出回主机

# 检查容器 mysql_server 有没有 up
$ docker ps -a
$ docker start mysql_server 

3. php-fpm-mod - php-fpm 5.6.19 加入一些 mysql 模块
制作成 php-fpm-mysql 镜像 (9000/tcp)
 
https://hub.docker.com/_/php/

$ cd /home/用户名
$ mkdir dockerfile_php
$ cd dockerfile_php
$ gedit Dockerfile
 

# 应可以改去 php:5.6.21-fpm, 但 php:7-fpm 会有些模块不能安装
FROM php:5.6.19-fpm

# Install modules
RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng12-dev \
    && docker-php-ext-install -j$(nproc) iconv mcrypt \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd \
    && docker-php-ext-configure mysqli --with-mysqli=mysqlnd  \
    && docker-php-ext-install mysqli  \
    && docker-php-ext-configure pdo_mysql --with-pdo-mysql=mysqlnd  \
    && docker-php-ext-install pdo_mysql \
    && docker-php-ext-configure mysql --with-mysql=mysqlnd  \
    && docker-php-ext-install mysql

CMD ["php-fpm"]

# 编译镜像 php-fpm-mysql

$ docker build -t php-fpm-mysql /home/用户名/dockerfile_php
$ docker images
# 运行容器 php-fpm-mod

$ docker run --name php-fpm-mod --volumes-from wwwroot --link mysql_server:mysql -d php-fpm-mysql

$ docker exec -it php-fpm-mod cat /etc/hosts
172.17.0.2    mysql ad0d03214936 mysql_server  
# 从这里知道 mysql_server 的 IP
172.17.0.3    f20cb9377b85


# 在 php-fpm-mod 测试 mysql

$ docker exec -it php-fpm-mod ping -c 3 mysql 

# 检查容器 php-fpm-mod 有没有 up
$ docker ps -a
$ docker start php-fpm-mod 
 
4. 准备3个测试文件

$ gedit /home/用户名/www/index.html

<html>
<head>
<title>Testing</title>
</head>
<body>
Testing
</body>
</html>

$ gedit /home/用户名/www/index.php

<?php
phpinfo();
?>

$ gedit /home/用户名/www/mysql.php
 

<?php
$con = mysql_connect("172.17.0.2","root","123456");

if (!$con) {
    die('Could not connect: ' . mysql_error());
}
mysql_select_db("test_db", $con);

$result = mysql_query("SELECT * FROM student");
while($row = mysql_fetch_array($result)) {
    echo $row['name'] . " " . $row['age'];
    echo "<br />";
}
mysql_close($con);
?>

5. Nginx Server (因要改设置文件, 所以要制作 nginx-fix 镜像)

https://hub.docker.com/_/nginx/

# 可以先运行容器 nginx_server, 备份里面的 /etc/nginx/conf.d/default.conf
$ docker run --name=nginx_server --volumes-from wwwroot --link php-fpm-mod:php -p 80:80 -d nginx 
$ docker cp nginx_server:/etc/nginx/conf.d/default.conf /home/用户名/default-ori.conf 
$ docker stop nginx_server
$ docker rm nginx_server  # 撤容器 nginx_server

 
# 准备编译 nginx-fix-0 镜像
$ cd /home/用户名
$ mkdir dockerfile_nginx

# 准备 nginx 设置文件
$ gedit /home/用户名/dockerfile
_nginx/default.conf

server {
    listen 80;

    root /var/www/html;
    index index.html index.htm index.php;

    server_name localhost;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
        # Uncomment to enable naxsi on this location
        # include /etc/nginx/naxsi.rules
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

# 准备 Dockerfile 编译镜像
$ gedit /home/用户名/dockerfile
_nginx/Dockerfile

FROM nginx
COPY default.conf /etc/nginx/conf.d/

# 编译镜像 nginx-fix-0
$ docker build -t nginx-fix-0 /home/用户名/dockerfile
_nginx
$ docker images

# 运行容器 nginx_server
$ docker run --name=nginx_server --volumes-from wwwroot --link php-fpm-mod:php -p 80:80 -d nginx-fix-0

如果现在去浏览 http://127.0.0.1/index.php   # 用 ifconfig 找 IP
会发现空白一片


以下开始 Fix 问题..
 
# $ docker exec -it nginx_server cat /etc/nginx/fastcgi_params
# 容器 nginx_server 中复制 fastcgi_params 出来
$ docker cp nginx_server:/etc/nginx/fastcgi_params /home/用户名/dockerfile
_nginx 
$ docker stop nginx_server
$ docker rm nginx_server  # 撤容器 nginx_server

$ docker rmi nginx-fix-0   # 镜像 nginx-fix-0

# 在 fastcgi_params 中添加一行
$ gedit /home/用户名/dockerfile
_nginx/fastcgi_params

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;
# 添加这行以解决空白页的问题
fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;

# 修改 Dockerfile, 添加 fastcgi_params 文件
$ gedit /home/用户名/dockerfile
_nginx/Dockerfile

FROM nginx
COPY default.conf /etc/nginx/conf.d/
COPY fastcgi_params /etc/nginx/


# 重新编译镜像 nginx-fix
$ docker build -t nginx-fix /home/用户名/dockerfile
_nginx
$ docker images

# 再运行容器 nginx_server
$ docker run --name=nginx_server --volumes-from wwwroot --link php-fpm-mod:php -p 80:80 -d nginx-fix


# 检查容器 nginx_server 有没有 up
$ docker ps -a
$ docker start nginx_server   

6. phpmyadmin (8080/tcp)

$ docker run --name phpmyadmin --link mysql_server -e PMA_HOST=mysql_server -p 8080:80 -d phpmyadmin/phpmyadmin

这个要用 http://127.0.0.1:8080
 
7. 开关容器程序 (不一定要用 docker-compose)

$ gedit control.sh

if [ `docker ps -a | grep -c "mysql_data"` -eq 0 ]
then
      var1=`docker run --name=mysql_data -v /var/lib/mysql -d busybox echo MySQL Data`
fi

if [ `docker ps -a | grep -c "wwwroot"` -eq 0 ]

then
      var1=`docker run --name=wwwroot -v /home/用户名/www:/var/www/html -d busybox echo wwwroot`
fi

if [ `docker ps -a | grep -c "mysql_server"` -eq 0 ]

then
      var1=`docker run --name=mysql_server --volumes-from mysql_data -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.5`
fi

if [ `docker ps -a | grep -c "php-fpm-mod"` -eq 0 ]

then
      var1=`docker run --name php-fpm-mod --volumes-from wwwroot --link mysql_server:mysql -d php-fpm-mysql`
fi

if [ `docker ps -a | grep -c "nginx_server"` -eq 0 ]

then
      var1=`docker run --name=nginx_server --volumes-from wwwroot --link php-fpm-mod:php -p 80:80 -d nginx-fix`
      var1=`docker stop nginx_server`
fi

var=`docker ps`

if [ `echo $var | grep -c "80/tcp" ` -gt 0 ]
then
  var1=`docker stop nginx_server`
  var1=`docker rm nginx_server`

  if [ `echo $var | grep -c "9000/tcp" ` -gt 0 ]
  then
      var1=`docker stop php-fpm-mod`
      var1=`docker rm php-fpm-mod` 
  fi

  if [ `echo $var | grep -c "3306/tcp" ` -gt 0 ]
  then
      var1=`docker stop mysql_server`
      var1=`docker rm mysql_server`
  fi

else
  var1=`docker start mysql_server`

  if [ `echo $var | grep -c "9000/tcp" ` -eq 0 ]
  then
      var1=`docker start php-fpm-mod`
  fi

  if [ `echo $var | grep -c "80/tcp" ` -eq 0 ]
  then
      var1=`docker start nginx_server`
  fi
fi

var=`docker ps`
echo "$var"


$ ./control.sh

2016年5月17日星期二

Linux - Docker 基础学习

# 搜索镜像
$ docker search ubuntu

# 下载镜像 ubuntu:16.04
$ docker pull ubuntu:16.04 

# 启动容器 (本地找不到镜像的话, 会动去下载镜像 hello-world:latest)
$ docker run hello-world

# 启动与进入容器 (用镜像 ubuntu:16.04)
$ docker run -it 仓库名:标签
$ docker run -it ubuntu:16.04 
 
$ docker run -it ubuntu bash 
$ exit

# 查看所有镜像 (可知道镜像ID / 仓库名 / 标签)
$ docker images

# 查看所有容器 (可知道容器ID / 容器名 / 镜像 / 状态 / ports)
$ docker ps -a

# 检查版本
$ docker version 

安装别人发布的镜像

https://hub.docker.com/r/docker/whalesay/

# 启动容器与运行镜像
docker/whalesay 中的程序 cowsay
$ docker run docker/whalesay cowsay boo
$ docker run docker/whalesay cowsay boo-boo


制作自己的镜像

$ gedit Dockerfile

$ docker build -t 
仓库名:标签 .   # . 代表当前目录或可直接写目录位置

Docker 其它基本操作

# 保存对容器的修改, 存成新的镜像
$ docker commit 容器ID 仓库名
$ docker commit -m "说明信息" -a "用户信息" 容器ID 仓库名:标签 

$ docker commit -m "Added nginx from ubuntu14.04" -a "saymagic" 79c761f627f3 saymagic/ubuntu-nginx:v2 

# 查看在运行容器
$ docker ps
$ docker inspect
容器ID

# start / stop / restart 容器
$ docker start 容器
$ docker stop 容器
$ docker restart 容器

# 撤除容器
$ docker rm 容器名 
 
# 撤除镜像
$ docker rmi -f 镜像ID
或 

$ docker rmi -f 镜像名

镜像的上传与发布 

# 先到 https://hub.docker.com/ 注册户口
$ docker login --username=
saymagic --email=saymagic@docker.com 

$ docker tag 镜像ID 仓库名:标签
 
# 上传与发布镜像
$ docker push
仓库名
 
$ docker push 仓库名:标签

镜像备份与恢复

# 将容器汇出成 Export.tar
$ docker export 容器ID > Export.tar 

# 将 Export.tar 进成镜像
$ cat Export.tar | docker import - 仓库名:标签
$ docker images 

# 将镜像存成 Save.tar
$ docker save 仓库名:标签 > Save.tar

# 将 Save.tar 载入成镜像
$ docker load < Save.tar
$ docker images