目录
1、Dokcer
一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口;
使用go语言编写,在LCX(linux容器)基础上进行的封装
简单来说:
1)就是可以快速部署启动应用
2)实现虚拟化,完整资源隔离
3)一次编写,四处运行(有一定的限制,比如Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用)
2、为什么要用Docker?
1、提供一次性的环境,假如需要安装Mysql,则需要安装很多依赖库、版本等,如果使用Docker则通过镜像就可以直接启动运行
2、快速动态扩容,使用docker部署了一个应用,可以制作成镜像,然后通过Dokcer快速启动
3、组建微服务架构,可以在一个机器上模拟出多个微服务,启动多个应用
4、更好的资源隔离和共享
一句话:开箱即用,快速部署,可移植性强,环境隔离
3、Linux云服务器Centos7安装Docker
- 添加yum源
# yum install epel-release –y //安装Linux的epel的yum源的命令 # yum clean all //清理yum缓存 # yum list //列出所有可安裝的软件清单命令
- 安装并运行Docker
# yum install docker-io –y //安装docker # systemctl start docker //以守护进程启动docker
- 检查安装结果
# docker info
4、Docker仓库、镜像、容器
输入 docker 命令来查看到 Docker 客户端的所有命令选项。
4.1 、镜像管理
容器运行时的只读模板,操作系统+软件运行环境+用户程序。镜像按照java的理解就是一个domain类。
class docker{
private String mysql;
private String rabbitmq;
}
- 查看镜像
#docker images
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
- 强制删除镜像。
# docker rmi –f registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5
4.2 、容器
容器包含了某个应用运行所需要的全部环境。容器就类似于java中new Docker()。每个容器中包含着镜像。
容器是一个标准的软件单元,它将代码及其所有依赖关系打包,以便应用程序从一个计算环境快速可靠地运行到另一个计算环境。Docker容器映像是一个轻量级,独立的可执行软件包,包含运行应用程序所需的一切:代码,运行时,系统工具,系统库和设置。
4.3、仓库
用来保存镜像,有公有和私有仓库。仓库就跟Maven的中央仓库和本地私服差不多。
5、Docker容器常见命令
- 搜索镜像 docker search xxxx
- 列出当前系统存在的镜像:docker images
- 拉取镜像:docker pull xxx
xxx:具体镜像名(格式 REPOSITORY:TAG)REPOSITORY:表示镜像的仓库源,TAG:镜像的标签
- 运行容器 docker run -d --name "xdclass_mq" -p 5672:5672 -p 15672:15672 rabbitmq:management
-d 后台运行 -p 端口映射 --name "xxx"
rabbitmq:management (格式 REPOSITORY:TAG),如果不指定tag,默认使用最新的
- 列举当前运行的容器:docker ps
- 检查容器内部信息:docker inspect 容器名称
- 删除镜像:docker rmi IMAGE_NAME
强制移除镜像不管是否有容器使用该镜像 增加 -f 参数
- 停止某个容器:docker stop 容器名称
- 启动某个容器:docker start 容器名称
- 移除某个容器: docker rm 容器名称 (容器必须是停止状态)
举栗子
- 1、获取镜像
docker run (首先会从本地找镜像,如果有则直接启动,没有的话,从镜像仓库拉起,再启动)
docker search nignx
- 2、列举
docker images
- 3、拉取
docker pull nignx
- 4、启动
docker run -d --name "tcq" -p 8088:80 nginx
docker run -d --name "tcq2" -p 8089:80 nginx
- 5、访问
docker 项目部署
用root用户,将docker-18.06.1-ce.tgz和docker.service上传到/data/hcfapp
解压docker-18.06.1-ce.tgz
[root@vatmpappqp01 data]# cd hcfapp
[root@vatmpappqp01 hcfapp]# tar -zxvf docker-18.06.1-ce.tgz
将解压后的文件复制到 /usr/bin目录下,然后给文件授权
[root@vatmpappqp01 hcfapp]# sudo cp docker/* /usr/bin/
[root@vatmpappqp01 hcfapp]# sudo chmod +x /usr/bin/docker*
将docker.service文件复制到/usr/lib/systemd/system/中,执行下述命令:
[root@vatmpappqp01 hcfapp]# cp docker.service /usr/lib/systemd/system/
[root@vatmpappqp01 hcfapp]# sudo systemctl daemon-reload
#设为开机自启
[root@vatmpappqp01 hcfapp]# sudo systemctl enable docker
#启动docker
[root@vatmpappqp01 hcfapp]# sudo systemctl start docker
安装成功检查
[root@vatmpappqp01 hcfapp]# docker -v
Docker version 18.06.1-ce, build e68fc7a
修改docker镜像默认存储路径
[root@vatmpappqp01 hcfapp]# mkdir dockerpath
[root@vatmpappqp01 hcfapp]# chmod 777 dockerpath
[root@vatmpappqp01 hcfapp]# cd /etc/docker
[root@vatmpappqp01 docker]# touch daemon.json
在/etc/docker/daemon.json 文件里添加下述内容
{
"graph":"/data/hcfapp/dockerpath"
}
重启docker
[root@vatmpappqp01 docker]# sudo service docker restart
[root@vatmpappqp01 docker]# sudo docker info
移除docker
停止docker服务
[root@sfapprodtestap1 hcfapp]# service docker stop
查看docker进程
[root@sfapprodtestap1 hcfapp]# ps -ef | grep docker
root 26471 20079 0 13:09 pts/0 00:00:00 grep --color=auto docker
删除docker目录和文件
[root@sfapprodtestap1 hcfapp]# rm -rf /usr/bin/docker*
[root@sfapprodtestap1 hcfapp]# rm -rf /usr/lib/systemd/system/docker.service
[root@sfapprodtestap1 hcfapp]# rm -rf /data/hcfapp/dockerpath
[root@sfapprodtestap1 hcfapp]# rm -rf /etc/docker/*
[root@sfapprodtestap1 hcfapp]# df -h|grep kubelet |awk -F % '{print $2}'|xargs umount
[root@sfapprodtestap1 hcfapp]# rm /var/lib/kubelet/* -rf
[root@sfapprodtestap1 hcfapp]# rm /etc/kubernetes/* -rf
[root@sfapprodtestap1 hcfapp]# rm /var/lib/rancher/* -rf
[root@sfapprodtestap1 hcfapp]# rm /var/lib/etcd/* -rf
[root@sfapprodtestap1 hcfapp]# rm /var/lib/cni/* -rf
[root@sfapprodtestap1 hcfapp]# iptables -F && iptables -t nat -F
[root@sfapprodtestap1 hcfapp]# ip link del flannel.1
[root@sfapprodtestap1 hcfapp]# ip link del tunl0
清除docker日志
#!/bin/sh
echo "======== start clean docker containers logs ========"
logs=$(find $1 -name *-json.log)
for log in $logs
do
echo "clean logs : $log"
cat /dev/null > $log
done
echo "======== end clean docker containers logs ========"
执行命令 sh clean_docker_log 路径
docker 部署nexus
sudo docker save sonatype/nexus3 |gzip -c > nexus.tar.gz
sudo docker load --input nexus.tar.gz
mkdir -p /app/nexus-data | chmod -R 777 /app/nexus-data
sudo docker run --restart=unless-stopped -d -p 5000-5010:5000-5010 -p 8081:8081 -v /app/nexus-data:/nexus-data --name nexus sonatype/nexus3
说明:
-p 表示将服务器的端口与容器端口映射
-v 表示将服务器的目录与容器的目录映射
其中neuxs映射的服务器路径要有权限
其中8081端口是对应nexus的管理界面的端口
5000-5010 表示5000到5010端口,后面创建私有仓库时端口必须在5000到5010之间
其中: /app/nexus-data是主机映射到容器目录/nexus-data的目录
docker 部署Mysql
•导入mysql镜像
命令
sudo docker load --input mysql-5.7.tar.gz
命令
sudo docker tag mysql:5.7 私有仓库地址/命名空间/mysql:5.7
sudo docker login 私有仓库地址 (登录过就可以不需要登录了)
sudo docker push私有仓库地址/命名空间/mysql:5.7
docker 部署gitlab
docker run -it --publish 8443:443 --publish 8080:80 --publish 2222:22 --name gitlab --restart always --volume /Users/rookie/gitlab/conf:/etc/gitlab --volume /Users/rookie/gitlab/logs:/var/log/gitlab --volume /Users/rookie/gitlab/data:/var/opt/gitlab -d gitlab/gitlab-ce:latest
常用命令
- 关闭docker : service docker stop
- 守护进程启动: sudo systemctl docker start
- 查看日志: docker logs [CONTAINER]
- 根据条件移除指定运行中的镜像: docker stop $(docker ps | grep 'rancher' | awk '{print $1}')
- 停止所有容器: docker stop $(docker ps -aq)
- 删除所有容器: docker rm -f $(docker ps -qa) (慎用: 会将所有容器都移除,包括启动中、未启动。)
问题
Error response from daemon: Cannot restart container 685ee63e6fd9: driver failed programming external connectivity on endpoint nexus (3ee26238a4c2382efb8e5ad788bbb14f7cd064d81b51ee549b0a0048c388ca99): Bind for 0.0.0.0:10081 failed: port is already allocated
Docker run出现no space left on device: https://blog.csdn.net/dinofish/article/details/90450410