Jade Dungeon

docker

常用的应用

ubuntu 1404 source

vi /etc/apt/sources.list 
deb http://mirrors.sohu.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ trusty-backports main restricted universe multiverse

deb http://cn.archive.ubuntu.com/ubuntu/ trusty main restricted
deb http://cn.archive.ubuntu.com/ubuntu/ trusty-updates main restricted
deb http://cn.archive.ubuntu.com/ubuntu/ trusty universe
deb http://cn.archive.ubuntu.com/ubuntu/ trusty-updates universe
deb http://cn.archive.ubuntu.com/ubuntu/ trusty multiverse
deb http://cn.archive.ubuntu.com/ubuntu/ trusty-updates multiverse
deb http://cn.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse

deb http://security.ubuntu.com/ubuntu trusty-security main restricted
deb http://security.ubuntu.com/ubuntu trusty-security universe
deb http://security.ubuntu.com/ubuntu trusty-security multiverse

ssh supervisor

apt-get install openssh-server supervisor
mkdir -p /var/run/sshd
mkdir -p /var/log/supervisor
# vi /root/supervisord.conf
[supervisord]
nodaemon=true

[program:sshd]
command=/usr/sbin/sshd -D

[program:tomcat]
command=bash /home/tomcat/workspace/test-web/bin/startup.sh
supervisord -c /root/supervisord.conf 

oracle jdk

apt-get install ssh software-properties-common python-software-properties
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

tomcat

sudo chmod -R 755 /opt/tomcat/
sudo groupadd tomcat
sudo useradd tomcat -g tomcat -d /home/tomcat -s /bin/bash
sudo mkdir /home/tomcat
sudo chgrp -R tomcat /home/tomcat
sudo chown -R tomcat /home/tomcat

建立独立工程:

export CATALINA_HOME=/opt/tomcat

mkdir -p /home/tomcat/workspace/test-web
cd /home/tomcat/workspace/test-web

cp -a $CATALINA_HOME/conf .
cp -a $CATALINA_HOME/webapps .
mkdir logs temp

建立启动脚本bin/startup.sh

#!/bin/sh
export CATALINA_HOME=/opt/tomcat
export CATALINA_BASE=/home/tomcat/workspace/test-web
$CATALINA_HOME/bin/catalina.sh start

建立停止脚本bin/shutdown.sh

#!/bin/sh                                                                                
export CATALINA_HOME=/opt/tomcat
export CATALINA_BASE=/home/tomcat/workspace/test-web
$CATALINA_HOME/bin/catalina.sh stop 

提交镜像:docker commit

启动容器:

sudo docker run -i -t --name tomcat -p 8001:8080 jade-dungeon/tomcat7:latest bash 

tomcat身份启动应用:

su -l tomcat -c '/home/tomcat/workspace/test-web/bin/startup.sh'

mongodb

#!/bin/bash
groupadd mongo
useradd mongo -g mongo -d /home/mongo -s /bin/bash
mkdir -p /home/mongo/mongodb-data/data /home/mongo/mongodb-data/log /home/mongo/script
chown -r mongo /home/mongo
chgrp -r mongo /home/mongo

su mongo
vi /home/mongo/script/mongod-start.sh

/opt/mongodb/bin/mongod  --dbpath /home/mongo/mongodb-data/data --logpath /home/mongo/mongodb-data/log/mongo.log

redis

mkdir -p $HOME/workspace/redis/env-dev/conf
mkdir -p $HOME/workspace/redis/env-dev/data
gvim $HOME/workspace/redis/conf/redis.conf

修改配置文件redis.conf

# bind 127.0.0.1    # 取消绑定
protected-mode no   # 非保护模式
daemonize no        # 非后台模式,不然与 docker run -d 冲突
appendonly yes      # 开启持久化
docker run -d -p 6379:6379 --name redis-dev                              \
  -v $HOME/workspace/redis/env-dev/conf/redis.conf:/etc/redis/redis.conf \
  -v $HOME/workspace/redis/env-dev/data:/data                            \
  redis:5.0.10 redis-server /etc/redis/redis.conf


MySQL

sudo docker search mysql
sudo docker pull   mysql:5.7
sudo docker images

mkdir -p $HOME/workspace/mysql/env-dev
             
sudo docker run -itd -p 3306:3306 --name mysql-dev                     \
             -v $HOME/workspace/mysql/env-dev/conf.d:/etc/mysql/conf.d \
             -v $HOME/workspace/mysql/env-dev/data:/var/lib/mysql      \
             -v $HOME/workspace/mysql/env-dev/logs:/logs               \
             -e MYSQL_ROOT_PASSWORD=p@ssw0rd mysql:5.7   

参数说明:

  • -p 3306:3306:映射容器服务的 3306 端口到宿主机的 3306 端口, 外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
  • MYSQL_ROOT_PASSWORD:设置 MySQL 服务 root 用户的密码。
  • -t会分配一个伪终端,并绑定到标准输入输出上。
  • -i容器的标准输入输出保持打开,以交互模式执行。
  • -d:后台运行容器,并返回容器ID

如果是用更新的版本比如MySQL8:

docker run -d --name mysql --network host --restart unless-stopped \
    -v /opt/mysql/data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=this1saP@ssw0rd \
    mysql:8.0 \
    --innodb-dedicated-server=ON \
    --group-replication-consistency=AFTER \
    --transaction-isolation=READ-COMMITTED \
    --lower_case_table_names=1

查看建立成功的容器

sudo docker ps -a

设定字符集为utf8mb4

# sudo vim $HOME/workspace/mysql/env-dev/conf.d/my.cnf
[mysqld]
character-set-server=utf8mb4

[mysql]
default-character-set=utf8mb4

[client]
default-character-set=utf8mb4

重启容器:

sudo docker restart mysql-dev

添加远程登录用户:


show global variables like "%datadir%";  # 数据文件位置
show variables like '%character%';       # 检查字符集

# ALTER USER 'root'@'localhost' IDENTIFIED BY 'p@ssw0rd';

CREATE USER 'devuser'@'%' IDENTIFIED WITH mysql_native_password BY 'qwer1234';
GRANT ALL PRIVILEGES ON *.* TO 'devuser'@'%';

创建测试表:

CREATE SCHEMA `jadedungeon` DEFAULT CHARACTER SET utf8mb4 ;

CREATE TABLE `jadedungeon`.`members` (
  `id` BIGINT(10) NOT NULL AUTO_INCREMENT,
  `userName` VARCHAR(45) NOT NULL,
  `pwdHash` VARCHAR(200) NOT NULL,
  `firstName` VARCHAR(45) NULL DEFAULT '',
  `lastname` VARCHAR(45) NULL DEFAULT '',
  `createTime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `lastUpdateTime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `remark` VARCHAR(300) NULL DEFAULT '',
  PRIMARY KEY (`id`),
  UNIQUE INDEX `username_UNIQUE` (`userName` ASC),
  INDEX `username` (`userName` ASC),
  INDEX `createtime` (`createTime` ASC),
  INDEX `lastupdate` (`lastUpdateTime` ASC));

insert into `jadedungeon`.`members` (userName, pwdHash, firstName, lastName, remark) values
('jade', 'e576d06e31006dd71a51ce89f5b0b85c65327878', 'Qiwei', 'Shan', 'First Member'),
('teo',  'e576d06e31006dd71a51ce89f5b0b85c65327878', 'Shuren', 'Zhou', 'Test User');

select * from `jadedungeon`.`members`;

开发环境

容器中的开发工具

docker pull spacevim

在docker中使用nvim:

docker run -it spacevim/spacevim nvim
  • -i:容器的标准输入输出保持打开,以交互模式执行。
  • -t:会分配一个伪终端,并绑定到标准输入输出上。

其他常用的参数还有:

  • -p:参数,可以把窗口中的某个端口映射到主机的某个端口,这对网络服务非常重要。
  • -v:参数,可以把主机的某个目录映射到 Container 中的某个目录,这样,共享文件就很方便了。

容器中的执行其他命令

在要一个容器中运行多个命令,可以指定docker container exec的方式指定运行bash

docker container exec -it spacevim-1.0 bash

这样就可以直接进行shell交互,操作其他命令了。

保存正在使用的环境

镜像导出为本地文件:

docker image save

导入镜像:

docker image load

容器访问硬件资源

Docker构建一个CUDA开发环境就需要访问显卡资源。 从理论上讲,这是可以的。毕竟Docker不同于虚拟机是和主机共享内核的, 而Nvidia的驱动只是一个内核模块。

使用lsmod命令查看内核模块,发现它确实是使用的 Nvidia 的驱动:

# sudo lsmod | grep nvidia
nvidia_uvm                 786432 0
nvidia_drm                  40960 2
.....

安装cuda-toolkit,也是可以安装的。 证明 Docker 中的程序可以访问主机上的所有硬件资源。

sudo aptitude install nvidia-cuda-toolkit