The World Best ST.

初入Docker

字数统计: 1.4k阅读时长: 6 min
2019/04/13 Share

Docker口号:

  1. Build, Ship and Run
  2. Build once,Run anywhere

Docker的安装

  1. yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine //完全卸载旧版本docker
  2. yum install docker.x86_64 //下载docker
    或yum install docker-ce
    ※如果出现: No package docker-ce available
    答: 先运行yum install epel-release, 再运行yum install docker-io

  3. service docker start //开启docker

  4. chkconfig docker on //开机自启

centos安装docker

  1. yum install epel-release //先安装epl工具
  2. yum -y install docker-io //安装docker
  3. service docker start //开启docker服务
  4. chkconfig docker on //设置为开机自启

如果上述方法不能安装成功, 可用下面的方法:

  1. vi /etc/yum.repos.d/docker.repo
  2. 在文件中填入以下内容

    [dockerrepo]
    name=Docker Repository
    baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
    enabled=1
    gpgcheck=1
    gpgkey=https://yum.dockerproject.org/gpg

  3. yum install docker-engine

  4. 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种:

  1. 在docker run中加入 –privileged=true 给容器加上特定权限
  2. 关闭selinux
  3. 在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

构建镜像

  1. 新建镜像模板文件 -> Dockerfile
    ※Dockerfile中有很多构建命令
  2. 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

CATALOG
  1. 1. Docker口号:
  2. 2. Docker的安装
    1. 2.1. centos安装docker
  3. 3. Docker部署nginx
  4. 4. Docker安装sql
  5. 5. Docker部署mongodb
  6. 6. Docker部署rabbitMQ
  7. 7. Docker部署gitlab
  8. 8. docker 的命令
    1. 8.1. 在docker仓库中搜索镜像
    2. 8.2. 运行容器
    3. 8.3. 获取容器ip
    4. 8.4. curl命令
    5. 8.5. 停止docker
    6. 8.6. 删除镜像
    7. 8.7. 删除容器
    8. 8.8. 查看容器日志
    9. 8.9. 显示容器运行的进程
    10. 8.10. 进入容器
    11. 8.11. 搜索镜像
    12. 8.12. 下载镜像
    13. 8.13. 查看镜像(镜像列表)
    14. 8.14. 上传小文件
    15. 8.15. 构建镜像
    16. 8.16. 构建自己的微服务镜像
  9. 9. 部署nginx遇到过的问题
    1. 9.1. 全部的容器(包括已经关闭的)
    2. 9.2. 启动的时候加上–rm会让他关闭的时候就会被删除