docker修改管理镜像容器管理等qiweb学习docker笔记2018 学习之旅更新20181015

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 
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(Docker,Linux,SQL数据库)