Docker口号:
- Build, Ship and Run
- Build once,Run anywhere
Docker的安装
- yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine //完全卸载旧版本docker
yum install docker.x86_64 //下载docker
或yum install docker-ce
※如果出现: No package docker-ce available
答: 先运行yum install epel-release, 再运行yum install docker-ioservice docker start //开启docker
- chkconfig docker on //开机自启
centos安装docker
- yum install epel-release //先安装epl工具
- yum -y install docker-io //安装docker
- service docker start //开启docker服务
- chkconfig docker on //设置为开机自启
如果上述方法不能安装成功, 可用下面的方法:
- vi /etc/yum.repos.d/docker.repo
在文件中填入以下内容
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpgyum install docker-engine
- service docker start
Docker部署nginx
方案1
docker run -p 80:80 –name nginx -v $PWD/www:/www -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs -d nginx
方案2
docker run -itd –name=nginx -p 80:80 –log-driver=json-file -v /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /docker/nginx/h5:/h5 nginx
$PWD 表示当前目录
Docker安装sql
docker run -p 3306:3306 –name mysql -v /docker/mysql/conf:/etc/mysql/conf -v /docker/mysql/logs:/logs -v /docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。
-v -v /docker/mysql/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。
-v /docker/mysql/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。
-v /docker/mysql/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
※运行时可能出现mysql启动不起来的情况,输入命令docker logs mysql
查看启动失败原因,发现提示/var/lib/mysql permission denied
的错误,原来是Centos7安全Selinux禁止了一些安全权限。解决方案有以下3种:
- 在docker run中加入 –privileged=true 给容器加上特定权限
- 关闭selinux
- 在selinux添加规则,修改挂载目录de
故将之前启动失败的容器删除,重新启动docker run
docker run -p 3306:3306 –name mysql –privileged=true -v /docker/mysql/conf:/etc/mysql/conf -v /docker/mysql/logs:/logs -v /docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
Docker部署mongodb
docker run -p 27017:27017 –name mongodb -v $PWD/db:/data/db -d mongo
Docker部署rabbitMQ
docker run -d –name rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:management
docker run -d -p 5672:5672 -p 15672:15672 –name rabbitmq rabbitmq
Docker部署gitlab
docker run -d –hostname 119.3.77.120 –env GITLAB_OMNIBUS_CONFIG=”external_url ‘http://119.3.77.120/'; gitlab_rails[‘lfs_enabled’] = true;gitlab_rails[‘gitlab_shell_ssh_port’] = 2222;” -p 2289:443 -p 8929:80 -p 2222:22 –name gitlab –restart always -v /docker/gitlab/config:/etc/gitlab -v /docker/gitlab/log:/var/log/gitlab -v /docker/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce
# -d:后台运行
# -p:将容器内部端口向外映射
# –name:命名容器名称
# -v:将容器内数据文件夹或者日志、配置等文件夹挂载到宿主机指定目录
docker 的命令
在docker仓库中搜索镜像
docker search 镜像名
如: docker search niginx
如果搜索超时, 可将仓库地址改为国内镜像地址, 修改方法: https://blog.csdn.net/zengmingen/article/details/78319334
运行容器
docker run -p 91:80 镜像名
-p: 容器端口映射, 91为linux开放的端口, 80为容器内开放的端口
-d: 后台启动容器
获取容器ip
docker inspect 容器名/容器id
curl命令
curl http://ip:port 可以在linux里访问docker端口
停止docker
docker stop 容器id
docker kill 容器id
删除镜像
docker rmi image id
删除容器
docker rm 容器id
查看容器日志
docker containers logs 容器id
显示容器运行的进程
docker top 容器id
进入容器
docker exec -it 容器id /bin/bash
docker-enter 容器idi
docker container exec -it 容器id /bin/bash
搜索镜像
docker search XX
例:docker search nginx
下载镜像
docker pull XX
查看镜像(镜像列表)
docker images
上传小文件
rz
构建镜像
- 新建镜像模板文件 -> Dockerfile
※Dockerfile中有很多构建命令 - docker build -t nignx:styy . -> 最后的点号代表Dockerfile文件所在的路径, nginx:styy表示在本地的nginx镜像上构建自己的nginx镜像
构建自己的微服务镜像
在Dockerfile中填入以下内容
# 基于哪个镜像
From java:8
#将本地文件夹挂载到当前容器
VOLUME /tmp
#复制文件到容器
ADD jar包名字.jar /app.jar -> 本地jar包名字 app.jar为改了名字的jar包
#声明需要暴露的端口
EXPOSE 8080
#配置容器启动后执行的命令
ENTRYPOINT[“java”,”-jar”,”/app.jar”]
使用docker build命令构建镜像
docker build -t 名字:版本号 . -> 点为dockerfile所在目录?
部署nginx遇到过的问题
按照语句安装的时候,报unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.的错,是由于conf/nginx.conf是个文件夹的缘故,把文件夹删了,创建一个nginx.conf文件即可
启动是成功了,但是docker ps发现nginx没有被起起来,同学说是nginx.conf里面没有配置的缘故,现将之前的容器和创建的nginx文件夹全部都清空,在nginx文件夹新增两个文件夹,conf和h5,从网上copy了一个nginx.conf的配置放在conf文件夹中,使用方案2进行部署nginx
全部的容器(包括已经关闭的)
docker container ps -a
启动的时候加上–rm会让他关闭的时候就会被删除
docker run –name miao123 –rm -d nginx