qiweb学习docker笔记2018 学习之旅更新20181015
1、 准备docker环境:
# yum -y install docker 安装docker
# service docker start 启动docker
# service docker status 查看状态
# docker ps 查看进程
@如果有输出
CONTAINER ID IMAGE COMMAND CREATED PORTS
证明已经安装完毕。
2、 部署外网环境
# docker search rabbitmq 在docker中央镜像仓库 搜索docker 镜像
# docker pull letsxo/rabbitmq 根据名称从服务器仓库拉取 镜像
# docker images 查看本地镜像列表
@接下来,根据下载的镜像创建rabbitmq容器 -p是物理机与docker容器端口映射 -v是挂在本地目录 --name是容器别名
# docker run -d -p 5671:5671 -p 5672:5672 -p 15672:15672 -p 15671:15671 -p 25672:25672 -v /data/rabbitmq-data/:/var/rabbitmq/lib --name rabbitmq 93a7eefb0865
@ 93a7eefb0865 :是镜像的ID,此处也可以写镜像的名字:如letsxo/rabbitmq
rabbitmq的数据库名称规则是,NODENAME@hostname,Docker每次从Docker image启动容器的时候会自动生成hostname,这样一来,你保存在主机上的数据库就会没用了,包括之前创建的用户也会没有了。所以在创建容器的时候必须指定--hostname=rabbitmqhostone,这样docker环境启动后rabbitmq就会一直读取固定目录中的数据了
下面一句是根据容器id 更新 设置 添加 --restart=always 容许开机自启动
docker update --restart=always 0563621934d706291bb11584c78b666e872a392b9218092b23f3ffd3b66d5264
docker update --hostname=rabbitmqhostone 0563621934d706291bb11584c78b666e872a392b9218092b23f3ffd3b66d5264
@查看已经运行的容器:
# docker ps
@打标签:
# docker tag 93a7eefb0865 rabbitmq:cuishuai
firewall-cmd --zone=public --add-port=5671/tcp --permanent
firewall-cmd --zone=public --add-port=5672/tcp --permanent
firewall-cmd --zone=public --add-port=15671/tcp --permanent
firewall-cmd --zone=public --add-port=15672/tcp --permanent
windows下 安装 rabbitMQ 及操作常用命令
rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统。它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rabbit MQ 是建立在Erlang OTP平台上。
1.安装Erlang
所以在安装rabbitMQ之前,需要先安装Erlang 。
### 20180820 qiweb在docker中安装mongodb
1、在系统中安装docker环境
yum install docker
2、启动docker服务
service docker start
3、找docker中央镜像仓库搜索mongodb相关的镜像
docker search mongodb
4、下载并安装镜像mongo
docker pull mongo
5、根据mongo镜像创建一个名字叫mongodb_docker的容器名称
#-d 后台运行 -p端口映射
docker run -d -p 27019:27017 --name mongodb_docker mongo
6、防火墙开放端口
firewall-cmd --zone=public --add-port=27019/tcp --permanent
docker 学习之旅笔记
#linux centos 7 安装docker
yum install docker
在线下载docker
yum install -y epel-release
更新
yum update
卸载:
1.查询安装过的包
yum list installed | grep docker
docker-engine.x86_64 17.03.0.ce-1.el7.centos @dockerrepo
搜索公开容器镜像
docker search centos6.6
2.删除安装的软件包
yum -y remove docker-engine.x86_64
3.删除镜像/容器等
rm -rf /var/lib/docker
卸载完成
yum install docker-io # 安装docker
chkconfig docker on # 加入开机启动
service docker start # 启动docker服务
修改好后重启docker 服务
systemctl daemon-reload
systemctl restart docker
重启docker服务后,将容器重启
docker start $(docker ps -aq)
安装完成后,运行下面的命令,验证是否安装成功。
$ docker version# 或者$ docker info
下载hello
$ docker image pull hello-world
#查看所有的镜像
docker image ls
# 查看进程
docker ps
1、安装mysql
使用docker官方镜像安装mysql服务
1 拉取mysql镜像,采用网易加速地址
docker pull hub.c.163.com/library/mysql:5.7
2 重命名镜像名
docker tag hub.c.163.com/library/mysql:5.7 mysql:5.7
3 创建用于挂载的目录
sudo mkdir /my/mysql/datadir #用于挂载mysql数据文件
sudo mkdir /my/mysql/conf.d #用于挂载mysql配置文件
sudo chown yaoren:docker /my #修改/my目录拥有者
4 使用镜像创建容器
docker run --name mysql5.7 -p 3306:3306 -v /my/mysql/datadir:/var/lib/mysql -v /my/mysql/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
命令解析:
--name:容器名
--p:映射宿主主机端口
-v:挂载宿主目录到容器目录
-e:设置环境变量,此处指定root密码
-d:后台运行容器
docker run --name mysql5.7 -p 3307:3307 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
5 测试是否成功
mysql -h192.168.2.102 -p3306 -uroot -p
#进入mysql交互界面
docker exec -it mysql bash
二、docker安装Tomcat容器
2.1.查找服务器的tomcat信息
# docker search tomcat
2.2下载下来官方的镜像Starts最高的那个
docker pull docker.io/tomcat
2.4启动tomcat
docker run -p 8081:8080 docker.io/tomcat # 若端口被占用,可以指定容器和主机的映射端口 前者是外围访问端口:后者是容器内部端口
centos7系统下搭建docker本地镜像仓库
## 准备工作
用到的工具, Xshell5, Xftp5, docker.io/registry:latest镜像
关于docker的安装和设置加速, 请参考这篇博文centos7系统下 docker 环境搭建
参考之前的博文, 设置完加速后, 执行docker pull registry命令, 下载docker.io/registry官方镜像
## 启动registry镜像
启动docker.io/registry容器, 如果tag是latest, 可以忽略不写
docker run -d -p 80:5000 --restart=always --name local_registry docker.io/registry:latest
-d 后台运行
-p 端口映射, 宿主机80端口映射给容器的5000端口
--restart=always 容器意外关闭后, 自动重启 (如果重启docker服务, 带这个参数的, 能自动启动为Up状态, 不带这个的,不会自动启动)
--name 给容器起个名字, 可以根据这个名字去停止/启动/删除容器
容器正常启动,对外提供服务通过5000端口映射到docker-registry的5000端口;
执行命令curl -X GET http://127.0.0.1:80/2/_catalog,收到的响应如下,是个json对象,其中repositories对应的值是空的json数组,表示目前仓库里还没有镜像:
{"repositories":[]}
1
OK,私有仓库已经创建和启动完毕了,接下来试试如何使用吧;
支持http协议推送
正常情况下,应用服务器推送镜像到仓库用的是https,此处我们通过命令行来测试推送用的是普通的http,所以需要修改docker的启动参数,使之允许以http协议工作;
执行推送镜像的机器是docker-app,所以登录到此机器(推荐使用SecureCRT);
修改/etc/default/docker文件,加入以下红框内容:
## 配置端口开放
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --list-all
firewall-cmd --reload
配置端口开放之后, 需要执行firewall-cmd --reload才能生效
docker images
1、配置docker的国内加速器
docker版本为1.13.1需要配置一下daemon.json
配置阿里云的docker加速器:
1
2
3
4
5
6
nielinqi@Centos:~$ vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://kv3qfp85.mirror.aliyuncs.com"
]
}
在此需要配置daemon.json的insecure-registries,为了解决https的报错,因为docker默认使用https协议,但是本地现在只支持http协议
不配置daemon.json的话会出现一下错误:
1
Get https://192.168.56.101:5000/v1/_ping: http: server gave HTTP response to HTTPS clie
配置如下:
1
2
3
4
5
6
7
8
9
nielinqi@Centos:~$ sudo vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://kv3qfp85.mirror.aliyuncs.com"
],
"insecure-registries": [
"192.168.56.101:5000"
]
}
重启docker进程
1
nielinqi@Centos:~$ sudo systemctl restart docker
docker pull 报错:Get https://registry:5000/v1/_ping: http: server gave HTTP response to HTTPS client
复制代码
解决办法:
[root@k8s-node-2 ~]# cat /etc/docker/daemon.json
{ "insecure-registries":["registry:5000"] }
-----------
在”/etc/docker/“目录下,创建”daemon.json“文件。在文件中写入:
{
"insecure-registries": [
"registry:5000:5000"
]
}
//多个私服写法,逗号分隔即可
{
"insecure-registries": [
"registry:5000",
"registry2:5000"
]
}
保存退出后,重启docker
systemctl restart docker
dockerui这个镜像可以在浏览器查看docker镜像和容器
docker pull winking/dockerui
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock winking/dockerui
项目技术介绍:java springboot maven构建 jdk 1.8, 依赖redis和mysql
下面是分别安装依赖服务,并部署启动web服务全过程
xshell连接vps远程上服务器。
安装jdk 配置环境变量省略
安装上传下载工具
yum install lrzsz
安装端口占用查看工具
netstat -nplt
安装检查端口
yum install telnet
安装docker容器
在线下载docker
yum install -y epel-release
yum install docker-io # 安装docker
chkconfig docker on # 加入开机启动
service docker start # 启动docker服务
---------------------
yum docker
拉取镜像
docker pull redis
docker pull mysql
下载安装包
redis-4.0.8.tar.gz
执行解压命令:
创建 redis容器随docker启动
docker run --name qiweb-redis -p 6379:6379 -v /qiweb/docker/redis_data:/data -d redis redis-server --appendonly yes
64fbc995854b3c113bca700f120bfb3aff11fdb556a51b7433525743ce71f00f
创建mysql容器
sudo docker run --name qiweb_mysql -p 12345:3306 -e MYSQL_ROOT_PASSWORD=12345678 -v /qiweb/docker/mysql_data:/var/lib/mysql -v /qiweb/docker/mysql_config:/etc/mysql/conf.d -d mysql --lower_case_table_names=1 --character-set-server=utf8
停止容器
docker stop mysql3
删除容器
docker rm mysql3
命令行链接mysql
docker exec -it qiweb_mysql bash
mysql -uroot -p
create database carinfo;
输入 quit退出命令行
在执行上传初始化sql文件
rz 上传carinfo。sql到/qiweb/docker/mysql_config目录实际上到dorcker容器中的/etc/mysql/conf.d/carinfo.sql对应
导入:
mysql -h 127.0.0.1 -u root -p carinfo < /etc/mysql/conf.d/carinfo.sql
可以直接运行的的spring boot项目
上传xx。jar
编写脚本
nohup语法:
nohup 命令
用途:不挂断地运行命令。
语法:nohup Command [ Arg … ][ & ]
所以只需要在启动命令前加上nohup命令,末尾加上&即可:nohup java -jar XX.jar &。
为了方便,我们可以编写启动脚本start.sh:
nohup java -jar XX.jar &
关停脚本stop.sh:
PID=`ps -ef | grep sms-2.0.jar | grep -v grep | awk '{print $2}'`
if [ -z "$PID" ]
then
echo Application is already stopped
else
echo kill $PID
kill -9 $PID
fi
重启脚本run.sh:
echo stop application
source stop.sh
echo start application
source start.sh
在编写shell脚本的过程中遇到了两个问题:
执行.sh文件提示权限不足:
解决办法:执行命令chmod u+x XX.sh赋予当前用于可执行的权限即可。
授权
chmod u+x *.sh
docker run :创建一个新的容器并运行一个命令
语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明:
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
---------------------
作者:独自等待_
来源:CSDN
原文:https://blog.csdn.net/alen_xiaoxin/article/details/54694051?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!
修改docker容器端口映射的方法
大家都知道docker run可以指定端口映射,但是容器一旦生成,就没有一个命令可以直接修改。通常间接的办法是,保存镜像,再创建一个新的容器,在创建时指定新的端口映射。
有没有办法不保存镜像而直接修改已有的这个容器呢?有。在stackoverflow上面找到答案了,原帖如下
https://stackoverflow.com/questions/19335444/how-do-i-assign-a-port-mapping-to-an-existing-docker-container
我的操作步骤是:
1) 停止容器
2) 停止docker服务(systemctl stop docker)
3) 修改这个容器的hostconfig.json文件中的端口(原帖有人提到,如果config.v2.json里面也记录了端口,也要修改)
cd /var/lib/docker/3b6ef264a040* #这里是CONTAINER ID
cd 容器目录 修改配置
/var/lib/docker/containers/0563621934d706291bb11584c78b666e872a392b9218092b23f3ffd3b66d5264
vi hostconfig.json
如果之前没有端口映射, 应该有这样的一段:
"PortBindings":{}
增加一个映射, 这样写:
"PortBindings":{"3306/tcp":[{"HostIp":"","HostPort":"3307"}]}
前一个数字是容器端口, 后一个是宿主机端口.
而修改现有端口映射更简单, 把端口号改掉就行.
4) 启动docker服务(systemctl start docker)
5) 启动容器
---------------------
作者:wesleyflagon
来源:CSDN
原文:https://blog.csdn.net/wesleyflagon/article/details/78961990?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!