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