nginx
docker pull nginx
docker run --name nginx -p 8081:80 -d nginx
mkdir -p ~/docker-data/nginx/www ~/docker-data/nginx/logs ~/docker-data/nginx/conf
拷贝容器内 Nginx 默认配置文件到本地当前目录下的 conf 目录,容器 ID 可以查看 docker ps 命令输入中的第一列:
执行docker cp执行将本地主机的index.html复制到docker容器中。
docker cp 本地主机文件路径 nginx容器id://usr/share/nginx/html
docker cp nginx容器id://usr/share/nginx/html/index.html 本地主机文件路径
docker cp <容器id>:/etc/nginx/nginx.conf ~/docker-data/nginx/conf
www: 目录将映射为 nginx 容器配置的虚拟目录。
logs: 目录将映射为 nginx 容器的日志目录。
conf: 目录里的配置文件将映射为 nginx 容器的配置文件。
docker run -d -p 8082:80 --name nginx-web -v ~/docker-data/nginx/www:/usr/share/nginx/html -v ~/docker-data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/docker-data/nginx/logs:/var/log/nginx nginx
docker exec -it nginx-web bash
如果要重新载入 NGINX 可以使用以下命令发送 HUP 信号到容器:
docker kill -s HUP container-name
重启 NGINX 容器命令:
docker restart container-name
Redis
docker search redis
docker pull redis
docker run --name redis -d -p 6339:6339 redis
docker run -p 6379:6379 -v $PWD/data:/data -d redis redis-server --appendonly yes
docker run --name redis-6379 -p 6379:6379 -v $PWD/data:/data -d --restart=always redis redis-server --appendonly yes --requirepass "123456"
-p 6379:6379 : 将容器内端口映射到宿主机端口(右边映射到左边)
-v /data/docker/redis/data:/data : 将主机中当前目录下的data挂载到容器的/data
redis-server –appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置
requirepass “your passwd” : 设置认证密码
–restart=always : 随 docker 启动而启动
–restart=unless-stopped : 如果容器正常 stopped,然后机器重启或 docker 服务重启,这种情况下容器将不会被 restart。
docker exec -it e55caa redis-cli
docker exec -it e55caa redis-cli -a <密码>
keys *
keys auth.*
get auth.userid.203
set key "value"
auth "yourpassword"
MongoDB
docker pull mongo
docker run --name mongo -p 27017:27017 -v ~/docker-data/mongo:/data/lib -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=admin -d mongo
docker exec -it mongo bash
mongo -u admin -p admin
help
show dbs
use springbucks
db.createUser(
{
user: "springbucks",
pwd: "springbucks",
roles: [
{ role: "readWrite", db: "springbucks" }
]
}
)
show users
Mysql
docker pull mysql
docker run --name mysql -d -p 3306:3306 -v ~/docker-data/mysql:/var/lib/mysql -e MYSQL_DATABASE=springbucks -e MYSQL_USER=springbucks -e MYSQL_PASSWORD=springbucks -e MYSQL_ROOT_PASSWORD=root_password mysql
docker run --name mysql -d -p 3306:3306 -v ~/docker-data/mysql:/var/lib/mysql -e MYSQL_DATABASE=ssms -e MYSQL_USER=root -e MYSQL_PASSWORD=root -e MYSQL_ROOT_PASSWORD=root mysql
docker exec -it mysql bash
mysql -h localhost -P 3306 -u springbucks -p
show databases;
use springbucks;
show tables;
修改密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root账户密码';
常用命令
导出整个数据库
mysqldump -u 用户名 -p –default-character-set=latin1 数据库名 > 导出的文件名(数据库默认编码是latin1)
mysqldump -u root -p test > test.sql
导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u root -p test users> test_users.sql
导出一个数据库结构
mysqldump -u root -p -d –add-drop-table test >d:test.sql
-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table
导入数据库
1. source 导入数据
source test.sql
2. 使用mysqldump命令
mysqldump -u username -p dbname < filename.sql
3. 使用mysql命令
mysql -u username -p -D dbname < filename.sql
库操作
创建数据库
命令:create database <数据库名>
create database test;
显示所有的数据库
命令:show databases (注意:最后有个s)
删除数据库
命令:drop database <数据库名>
连接数据库
命令:use <数据库名>
查看当前使用的数据库
select database();
当前数据库包含的表信息:
show tables; (注意:最后有个s)
表操作
命令:create table <表名> ( <字段名> <类型> [,..<字段名n> <类型n>]);
mysql> create table MyClass(
id int(4) not null primary key auto_increment,
name char(20) not null,
sex int(4) not null default ’′,
degree double(16,2));
获取表结构
命令:desc 表名,或者show columns from 表名
DESCRIBE MyClass
desc MyClass;
show columns from MyClass;
删除表
命令:drop table <表名>
rabbitmq
docker pull rabbitmq
docker pull rabbitmq:3.7-management # 一般用这个
docker run --name rabbitmq -d -p5672:5672 -p 15671:15672 -e RABBITMQ_DEFAULT_USER=spring -e RABBITMQ_DEFAULT_PASS=spring rabbitmq:3.7-management
gitlab
docker pull gitlab/gitlab-ce
docker run --detach \
--hostname gitlab.example.com \
--publish 22443:443 --publish 20280:80 --publish 20222:22 \
--name gitlab \
--restart always \
--volume ~/docker-data/gitlab/config:/etc/gitlab \
--volume ~/docker-data/gitlab/logs:/var/log/gitlab \
--volume ~/docker-data/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
逐行解释
1. 后台运行
2. 设置主机名或域名
3. 本地端口的映射
4. gitlab-ce 的镜像运行成为一个容器,这里是对容器的命名
5. 设置重启方式,always 代表一直开启,服务器开机后也会自动开启的
6. 将 gitlab 的配置文件目录映射到 ~/docker-data/gitlab/config 目录中
7. 将 gitlab 的log文件目录映射到 ~/docker-data/gitlab/logs 目录中
8. 将 gitlab 的数据文件目录映射到 ~/docker-data/gitlab/data 目录中
9. 需要运行的镜像
查看容器列表
docker container ls
查看系统 ip
ip addr
打开 gitlab
http://xxx:20280
设置密码
用 root 登录
swarm docker-compose.yml
version: "3"
services:
gitlab:
image: 'gitlab/gitlab-ce:latest'
ports:
- '20280:80'
- '22443:443'
- '20222:22'
volumes:
- /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- '~/docker-data/gitlab/config:/etc/gitlab'
- '~/docker-data/gitlab/logs:/var/log/gitlab'
- '~/docker-data/gitlab/data:/var/opt/gitlab'
deploy:
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
resources:
limits:
cpus: "2"
memory: 2048M
logging:
driver: "json-file"
options:
max-size: "20m"
max-file: "2"
docker-compose.yml
version: "2.2"
services:
gitlab-web:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: 'gitlab.example.com'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://gitlab.example.com'
# Add any other gitlab.rb configuration here, each on its own line
ports:
- '80:80'
- '443:443'
- '22:22'
volumes:
- '/srv/gitlab/config:/etc/gitlab'
- '/srv/gitlab/logs:/var/log/gitlab'
- '/srv/gitlab/data:/var/opt/gitlab'
cpus: '0.5'
mem_limit: 2048m
jenkins
docker pull jenkins/jenkins
docker run -d -p 8090:8080 -p 50000:50000 -v ~/docker-data/jenkins:/var/jenkins_home --name jenkins jenkins/jenkins
-p 8090:8080 将镜像的8080端口映射到服务器的8090端口
-p 50000:50000 将镜像的50000端口映射到服务器的50000端口
-v jenkins:/var/jenkins_home jenkins_home目录为jenkins工作目录,我们将硬盘上的一个目录挂载到这个位置,方便后续更新镜像后继续使用原来的工作目录。
-v /etc/localtime:/etc/localtime 让容器使用和服务器同样的时间设置。
--name jenkins 给容器起一个别名
获取密码
docker exec jenkins tail /var/jenkins_home/secrets/initialAdminPassword
可能遇到的问题
1. touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
需要修改下目录权限, 因为当映射本地数据卷时,~/docker-data/jenkins目录的拥有者为root用户,而容器中jenkins user的uid为1000
执行如下命令即可:
chown -R 1000:1000 ~/docker-data/jenkins
2. 如果一直在 Please wait while Jenkins is getting ready to work ..., 是网络问题,需要添加国内镜像
需要你进入jenkins的工作目录,打开
vi ~/docker-data/jenkins/hudson.model.UpdateCenter.xml
其他镜像源
registry
docker image 私有仓库
建议使用 harbor 或 Nexus3 搭建私有仓库
docker-register-web
docker pull joxit/docker-registry-ui
docker pull registry
docker run -d -p 5000:5000 --restart always --name registry registry:2
docker run -d -p 5000:5000 --restart=always --name registry registry
docker run -d \
-p 5000:5000 \
-v /opt/data/registry:/var/lib/registry \
registry
推送本地仓库
docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]。
使用 docker tag 将 ubuntu:latest 这个镜像标记为 127.0.0.1:5000/ubuntu:latest
docker tag ubuntu:latest 127.0.0.1:5000/ubuntu:latest
docker push 127.0.0.1:5000/ubuntu:latest
用 curl 查看仓库中的镜像。
curl 127.0.0.1:5000/v2/_catalog
注意
如果你不想使用 127.0.0.1:5000 作为仓库地址,比如想让本网段的其他主机也能把镜像推送到私有仓库。
你就得把例如 192.168.199.100:5000 这样的内网地址作为私有仓库地址,这时你会发现无法成功推送镜像。
这是因为 Docker 默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 的配置选项来取消这个限制,或者查看下一节配置能够通过 HTTPS 访问的私有仓库。
对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)
{
"registry-mirror": [
"https://registry.docker-cn.com"
],
"insecure-registries": [
"192.168.199.100:5000"
]
}
svn
docker pull garethflowers/svn-server
docker run \
--name svn-server \
--detach \
--volume /home/svn:/var/opt/svn \
--publish 3690:3690 \
garethflowers/svn-server
创建新仓库
docker exec -it svn-server svnadmin create repo
当前仓库下
!!!注意!!!配置文件不要注释!!!
!!!注意!!!配置文件不要注释!!!
!!!注意!!!配置文件不要注释!!!
资源仓库配置,修改 conf/svnserve.conf
vim conf/svnserve.conf
[general]
anon-access=none # 匿名用户不可读写,也可设置为只读 read
auth-access=write # 授权用户可读可写
password-db=passwd # 密码文件路径,相对于当前目录
authz-db=authz # 访问控制文件
realm=/var/opt/svn/repo # 认证命名空间,会在认证提示界面显示,并作为凭证缓存的关键字,可以写仓库名称比如repo
realm=repo
配置账号与密码,修改 conf/passwd 文件,格式为“账号 = 密码”
[users]
harry = harryssecret
sally = sallyssecret
admin=123456
配置账户权限,修改 conf/authz 文件
[groups]
owner=admin
[/] # / 表示所有仓库
admin=rw # 用户 admin 在所有仓库拥有读写权限
[repo:/] # 表示以下用户在仓库 svn 的所有目录有相应权限
@owner=rw # 表示 owner 组下的用户拥有读写权限
防火墙开放端口
firewall-cmd --zone=public --add-port=3690/tcp --permanent
firewall-cmd --reload
重启 svn-server
docker restart svn-server
常用命令
检出仓库
svn checkout svn://localhost:3690/repo --username admin
svn checkout svn://localhost:3690/repo /Users/leo/repo --username admin
svn co svn://localhost/repo --username admin --password 123456
提交文件
echo abc > test.txt
svn add test.txt
svn commit -m 'test'
查看仓库中的文件
svn list test.txt
还原文件
svn revert test.txt
docker-compose.yml
version: "2.2"
services:
svn:
image: 'garethflowers/svn-server:latest'
restart: unless-stopped
ports:
- '3690:3690'
volumes:
- /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- '/mnt/docker-data/svn/home:/var/opt/svn'
cpus: '1'
mem_limit: 1024m
logging:
driver: "json-file"
options:
max-size: "20m"
max-file: "2"
nginx-proxy
自动化 Nginx 反向代理 Docker, nginx-proxy 启动一个容器来运行 nginx 和 docker-gen。 在主机上的容器启动和停止时 docker-gen 会生成 nginx 反向代理配置并且重新加载 nginx。
version: '2'
services:
nginx-proxy:
image: jwilder/nginx-proxy
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
whoami:
image: jwilder/whoami
environment:
# - VIRTUAL_HOST=whoami.local # 定义访问改容器的域名
- VIRTUAL_HOST=xinlichao.cn,www.xinlichao.cn
- VIRTUAL_PORT=8000
curl -H "Host: whoami.local" localhost