Docker
Linux下安装docker
centos6 下安装
- yum install -y epel-release
- yum install -y docker-io
- 安装后配置文件 、etc/sysconfig/docker
- 启动docker 后台服务 server docker start
- docker version 验证
centos7 安装 https://docs.docker.com/engine/install/centos/
-
首先关闭防火墙
systemctl status firewalld (查看防火墙状态)
systemctl stop firewalld (停止防火墙)
systemctl disable firewalld(禁止开机启动)
- ping不通网络
1、打开 vi /etc/sysconfig/network-scripts/ifcfg-eth0(ip addr),把ONBOOT=no,改为ONBOOT=yes 2、打开 vi /etc/resolv.conf,增加 nameserver 8.8.8.8 3、重启网络: service network restart
yum list错误:Cannot find a valid baseurl for repo: base/7/x86_6
https://blog.csdn.net/qq_37922264/article/details/81054673
yun repolist all 错误
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
Linux 重启之后ip变化
https://blog.csdn.net/qq_27385759/article/details/77247302
如果修改完还上不去网,检查vmware 服务是否开启
linux系统 中 centos扩容
https://www.cnblogs.com/leiblog/p/13560070.htm
Centos7.5 防火墙关闭但是除22端口其他端口无法访问问题
启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: systemctl status firewalld
重新加载配置文件:firewall-cmd --reload
- 官网的步骤下载Docker
$ sudo yum install -y yum-utils
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --enable docker-ce-nightly
yum-config-manager --enable docker-ce-test
yum-config-manager --disable docker-ce-nightly
yum install docker-ce docker-ce-cli containerd.io
yum list docker-ce --showduplicates | sort -r 查看docker版本信息
后续可做以下操作:
systemctl start docker(启动docker)
systemctl enable docker(设为开机启动)
如果xshell连接不上:
可能是服务没启动 service ssh start
docker 命令没有权限执行
sudo groupadd docker #添加docker用户组 sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中 newgrp docker #更新用户组 docker ps #测试docker命令是否可以使用sudo正常使用
Docker离线镜像的下载与上传
#查看镜像
docker images
#保存镜像
docker save xxxxx -o /home/docker/xxxx.tar
#上传至另一台服务器
docker load -i xxxxx.tar
阿里云镜像加速
配置加速器地址:阿里镜像
Docker其他命令
- Docker后台运行
docker run -d xxx
- Docker查看日志
docker logs -f -t --tail xxxx
- Docker 查看容器内部进程信息
docker top xxx
- 查看容器内部信息
docker inspect xxx
mounts:中显示的是挂载文件
- 进入容器
docker exec -it xxx
- 提交commit
docker commit -m="描述" -a="作者" id 名称:1.0
Docker
仓库、镜像、容器
touch 03.txt 新建文件
1、是什么?
开发环境与部署环境不同,会造成多于的问题。
一次封装,到处运行
解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。
小型精华版Linux
2.Docker安装
docker的安装必须在centos6.5以上
容器通过镜像创建
3.docker run hello-world :运行镜像
4.docker为什么比虚拟机快
1.docker有着比虚拟机更少的抽象层,减少了硬件的虚拟化
2.docker利用的是宿主机的内核,不需要guestos
5.常用命令
1.帮助命令
docker version
docker info 信息描述
docker --help 帮助命令
2.镜像命令
docker images 列出本地的镜像
-a 列出本地全部的镜像
-q 返回当前镜像id 组合-aq
-digests 显示镜像备注
--no-trunc 详细信息
docker search 查询某个镜像的名字
docker search -S 30 tomcat 点赞数超过三十
docker pull xxx 拉取镜像
docker pull 默认最新版,:版本号----下载需要的版本
docker rmi xxx 删除镜像,默认删除最新的
docker rmi -f xx 强制删除
3.容器命令
docker pull cesnos 下载centos镜像
//利用下载的镜像启动centos容器
docker run -it(打开终端) 名字 --name 别名xxx
加上-p 对外暴露端口:8080 tomcat端口
//不返回交互()
docker run -d 名字 ---会启动之后立即退出
//查看日志
docker logs -t -f xxx编号
-f追加
--tail 30 最后三十行
//进入容器
docker attach xxx编号
docker exec 在外面操作docker
//从容器中拷文件出来
docker cp 编号:地址文件 需要拷贝到的地址文件
//查看docker所有启动的容器
docker ps
//退出
exit // crtl+p+q 相当于最小化
//重启
docker restart xxx容器编号
//停止
docker stop xxx编号
//强制停止
docker kill xxx
//删除停止的容器
docker rm -f xx
6.镜像
轻量级可执行的独立软件包,用于打包软件运行环境和基于运行环境的开发软件
由一层层文件系统组成,这种层级的文件为UnionFS(联合文件系统)
为什么这种方式?
为了共享资源,共享镜像
1.提交自己的镜像
docker commit -m="描述信息" -a=“作者” 编号 名字
docker push
2.指定 docker映射到tomcat的端口
docker -p docker暴露端口:8080(tomcat端口) 名称(tomcat)
docker -P tomcat 随机分配端口
7.数据卷
为了保存容器中的数据,因为如果不保存,容器重启就失效。
能干嘛:数据持久化,容器间的数据共享。
1.在容器中添加数据卷
命令,dockerFIle
docker run -it -v /宿主机绝对路径:/容器内目录 镜像名
容器停止退出后,主机修改会完全同步
docker run -itd
//容器设置权限,只读
docker run -it -v /宿主机绝对路径:/容器内目录:ro 镜像名
8.DockerFile
相当于类编译之后的源码,是构建镜像的文件(一系列命令和脚本)
容器间共享 docker run -it --name doc2 --volumes-from doc1(上一容器) mycentos
容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。
dockerFile 解析
dockerFile 编写步骤
1.通过编写dockerFile文件,必须符合规范
2.直接使用docker build命令执行,或得自定义的镜像
3.docker run
dockerFile体系结构
基础知识
每个保留字必须大写,保留字指令
从上到下执行
#表示注释
每条指令回创建一个新的镜像层-----套娃
FROM #基础镜像,当前镜像基于哪个镜像
MAINTAINER #进行维护者的姓名和邮箱
RUN #容器构建时需要运行的命令
EXPOSE #对外暴露的端口号
WORKDIR #登录之后的工作目录
ENV #设置环境变量
ADD,COPY #两个差不多,add拷贝加解压(比如添加tomcat的压缩包),copy直接只有拷贝
VOLUME #设置数据卷,保持数据持久化(挂载地址)
CMD #指定容器启动时执行命令(可以有多个,只有最后一个生效)
ENTRYPOINT #指定容器启动执行命令(追加命令)
ONBUILD #父镜像在被子镜像继承时 父镜像的ONBUILD会被触发(触发器)
docker执行dockerfile的大致流程
docker从基础镜像创建一个容器
执行一条指令对容器进行修改
执行类似dockercommit 操作提交一个新的镜像层
docker基于刚提交的镜像运行一个新容器
执行dockerfile下一条指令直到全部完成
#自己制作一个centos
vi dickerfile01
#编写
FROM centos
VOLUME {"挂载目录1","挂载目录2"} #匿名挂载,再宿主机自动生成了响应的目录(名称随机)
CMD echo "----end---"
CMD /bin/bash
#运行(-f 执行的dockerfilr -t 生成的名字)
docker build -f /home/zbhou/dockerfile01 -t mycentos
docker容器间的数据共享
#启动centos01
docker run -d --name centos01 centos
#启动centos02---数据卷共享
docker run -d --name centos02 --voulms-from ceontos01 centos
Base镜像: scratch
docker百分之九十的镜像都是通过base镜像搭建起来的
案例
1.定义 dockerfile
vim mydocker
FROM centos
ENV mypath /tmp
WOrKDIR /temp 启动进入目录
RUN yun -y install vim 配置自己需要的命令(默认不存在)
RUN yun -y install vim
EXPOSE 80
CMD bin/bash
2.build
docker build -f /路径/mycentos -t 取个名字:1.3(版本号)
3.运行容器
docker run -it mycentos:1.3
2.CMD
为 容器启动时 执行的命令
docker run -it -p 7777:8080 tomcat ls -l
相当于 ls -l 写在了cmd 后面,回覆盖之前的,不会启动tomcat,回展示当前资源
-
ENTROYPOINT
比cmd厉害一点,并不会覆盖cmd 可以为命令加参数(参数追加) 把CMD换成 ENTROYPOINT
4.ONBUILD
有人继承该镜像是,执行父类的 ONBUILD 命令
5.COPY
类似ADD 拷贝文件和目录到镜像中,将从构建上下文的源路径的文件,复制到新一层的镜像中
6.ADD
移动加解压缩
在docker中的tomcat运行 web应用
运行mysql
docker运行mysql
#创建本地容器
mkdir -p /root/mysql/data /root/mysql/logs /root/mysql/conf
#在conf中创建conf文件
touch my.cnf
#去到上传镜像文件夹后启动镜像 root密码为123456
docker run -d --name mysql -p 3306:3306 -v /home/zbhou/docker/mysql/conf:/etc//mysql/conf.d -v /home/zbhou/docker/mysql/data:/var/lib/mysql -v /home/zbhou/docker/mysql/logs:/logs -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6
docker运行DB2
docker run -d --name db2 -p 50000:50000 -e DB2INST1_PASSWORD=省缺用户密码 -e LICENSE=accept ibmcom/db2express-c:latest db2start
-d: 后台运行容器,并返回容器ID
--name db2 为容器指定一个名称
-p 50000:50000 允许远程的客户端可以从50000 端口连接到数据库实例
(端口映射,格式为:主机(宿主)端口:容器端口)
-e DB2INST1_PASSWORD=db2admin 为缺省的Db2实例用户db2inst1设置密码为db2admin
-e LICENSE=accept 表示接受了使用Db2软件的许可证协议
docker exec -it db2 /bin/bash
su db2inst1 //切换用户
db2start //启动DB2
db2sampl //创建默认数据库“SAMPLE”
docker exec :在运行的容器中执行命令
-t :分配一个伪终端
db2 是容器的名称
复制:
docker cp /root/init.sh 容器ID:/home/hundsun/workspace/log
问题
-
DB2start 时:报错 SQL1026N The database manager is already active.
执行 db2stop force
-
在db2inst1用户下创建数据库,在程序中指定schema
jdbc:db2://172.17.102.8:8017/boss:currentSchema=TIMER
- 删除db2database
#第一步:连接db2数据库
db2 connect to [dbname] user [username] using [password]
#第二步:查看该数据库有多少应用
db2 list applications
#第三步:杀掉这些应用
db2 force applications all
#第四步:停止数据库
db2 deactivate database databasename
#第五步:断开数据库
db2 terminate
#第六步:删除db2数据库
db2 drop database databasename
Docker运行Nginx
- 安装
- 通过镜像启动容器
docker run --name nginx -it -d -p 80:80 502a83e111bf /bin/bash
docker run --name nginx -d -p 80:80 -v /home/zbhou/docker/Nginx/conf.d:/etc/nginx/conf.d -v /home/zbhou/docker/Nginx/nginx.conf:/etc/nginx/nginx.conf 502a83e111bf tail -f /dev/null
- etc下的nginx文件夹中 找到nginx的配置文件
- 安装vi命令
apt-get update
apt-get install vim
-
修改配置文件—注意修改nginx为文件开头
-
user root;
-
-
在conf.d 文件下新建配置文件 default.conf 文件
server
{
listen 80;
server_name 192.168.115.121;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /api{
# proxy_pass http://ip:port/api;
# access_log "logs/test.log";
} }
-
如果浏览器打开80端口失败
- 首先ping一下地址
- 不可以进行下面操作
curl http://localhost:80 ---------没有该命令 先执行 apt-get update 然后执行 apt-get install curl
所遇问题
-
启动容器时立即退出,在容器后加入 tail -f /dev/null
-
启动 run时报错 # docker: Error response from daemon: driver failed programming external connectivity on endpoint lamp
docker服务启动时定义的自定义链DOCKER被清除
重启即可systemctl restart docker
-
打开端口失败 在centos7 上开启端口
查看所有开启的端口 firewall-cmd --list-ports 防火墙开启端口访问 firewall-cmd --zone=public --add-port=80/tcp --permanent 【重启命令】: firewall-cmd --reload 不过一般直接关闭防火墙即可 通过telnet 命令进行验证!!!
-
需要进入容器中手动开启nginx,否则还是没有启动nginx
地址为 etc/init.d/ 执行 **./nginx start**
docker运行nocas
1.pull nacos
2.运行mysql,创建库
3.运行nacos
docker run -d -e PREFER_HOST_MODE=ip -e MODE=standalone -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_MASTER_SERVICE_HOST=127.0.0.1 -e MYSQL_MASTER_SERVICE_PORT=3306 -e MYSQL_MASTER_SERVICE_USER=root -e MYSQL_MASTER_SERVICE_PASSWORD=123456 -e MYSQL_MASTER_SERVICE_DB_NAME=nacos -e MYSQL_SLAVE_SERVICE_HOST=127.0.0.1 -e MYSQL_SLAVE_SERVICE_PORT=3306 -v /opt/dockernacos/logs:/home/nacos/logs -p 8848:8848 --name nacos --restart=always nacos/nacos-server