关于docker:Docker整理

36次阅读

共计 4335 个字符,预计需要花费 11 分钟才能阅读完成。

Docker 是一个开源的利用容器引擎,基于 Go 语言 并听从 Apache2.0 协定开源。
Docker 能够让开发者打包他们的利用以及依赖包到一个轻量级、可移植的容器中,而后公布到任何风行的 Linux 机器上,也能够实现虚拟化。
容器是齐全应用沙箱机制,相互之间不会有任何接口(相似 iPhone 的 app), 更重要的是容器性能开销极低。
本文所有操作都在 centos7 下面操作

装置与启动

# 一、装置 Docker
curl -sSL https://get.daocloud.io/docker | sh    # 应用国内 daocloud 一键装置命令:docker -v                                        # 查看 Docker 版本

# 二、启动与进行 Docker
# *systemctl* 命令是零碎服务管理器指令,它是 service 和 chkconfig 两个命令组合。systemctl start docker    # 启动 docker
systemctl stop docker     # 进行 docker
systemctl restart docker  # 重启 docker
systemctl status docker   # 查看 docker 状态
systemctl enable docker   # 开机启动
docker info               # 查看 docker 概要信息
docker --help             # 查看 docker 帮忙文档 

权限问题解决

操作镜像时可能会呈现一些权限谬误

# 报错:Got permission denied while trying to connect to the Docker daemon socket at unix:///var/
sudo gpasswd -a username docker   #将普通用户 username 退出到 docker 组
newgrp docker                     #更新 docker 组
# 报错:is not in the sudoers file
# su 只是切换了 root 身份,但 Shell 环境依然是普通用户的 Shell;此时 pwd,发现工作目录依然是普通用户的工作目录
# su - 连用户和 Shell 环境一起切换成 root 身份了。只有切换了 Shell 环境才不会呈现 PATH 环境变量谬误。此时 pwd,工作目录变成 root 的工作目录了。su -            # 切换 root 用户
visudo          #切记,此处没有 vi 和 sudo 之间没有空格。开端退出:your_user_name ALL=(ALL)  ALL。保留,这样就把本人退出了 sudo 组,能够应用 sudo 命令了 

镜像

docker images                    # 列出镜像。这些镜像都是存储在 Docker 宿主机的 /var/lib/docker 目录下
docker search 镜像名称            # 搜寻镜像,网络中查找须要的镜像
docker pull centos:7             # 拉取镜像
docker rmi $IMAGE_ID             # 删除指定镜像 
docker rmi `docker images -q`    # 删除所有镜像

# 设置 Docker 镜像减速
vi /etc/docker/daemon.json       # 如果该文件不存在就手动创立
# 增加内容:{"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]}
# {"registry-mirrors":["https://hub.daocloud.io"]}
# 之后重新启动服务:systemctl daemon-reload
systemctl restart docker

容器

# 一、查看容器
docker ps                       # 查看正在运行容器
docker ps –a                    # 查看所有的容器(启动过的历史容器)docker ps –l                    # 查看最初一次运行的容器
docker ps -f status=exited      # 查看进行的容器

# 二、创立与启动容器
# 创立容器命令:docker run
# -i:示意运行容器
# -t:示意容器启动后会进入其命令行。退出这两个参数后,容器创立就能登录进去。即调配一个伪终端。# --name : 为创立的容器命名。# -v:示意目录映射关系(- v 参数 后边为   宿主机目录: 容器目录),能够应用多个-v 做多个目录或文件映射。留神:最好做目录映射,在宿主机上做批改,而后共享到容器上。# -d:在 run 前面加上 - d 参数, 则会创立一个守护式容器在后盾运行(这样创立容器后不会主动登录容器,如果只加 -i - t 两个参数,创立后就会主动进去容器)。# -p:示意端口映射(- p 参数 后边为   宿主机端口: 容器端口)。能够应用多个-p 做多个端口映射

docker run -it --name=mycentos centos:7 /bin/bash                # 交互式容器
docker run -id --name=mycentos1 centos:7                         # 守护式容器
docker exec -it container_name (或者 container_id)  /bin/bash     # 登录守护式容器形式
# 应用 exit 命令 退出以后容器

# 三、进行与启动容器
docker stop $CONTAINER_NAME/ID                # 进行正在运行的容器:docker start $CONTAINER_NAME/ID               # 启动已运行过的容器:# 四、文件拷贝
docker cp 须要拷贝的文件或目录 容器名称: 容器目录
docker cp 容器名称: 容器目录 须要拷贝的文件或目录

# 五、目录挂载
# 咱们能够在创立容器的时候,将宿主机的目录与容器内的目录进行映射,这样咱们就能够通过批改宿主机某个目录的文件从而去影响容器。# 创立容器 增加 - v 参数 后边为   宿主机目录: 容器目录
# 如果你共享的是多级的目录,可能会呈现权限有余的提醒。这是因为 CentOS7 中的平安模块 selinux 把权限禁掉了,咱们须要增加参数  --privileged=true  来解决挂载的目录没有权限的问题
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos2 centos:7

# 六、查看容器 IP 地址
docker inspect mycentos2                                               # 查看容器运行的各种数据
docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos2     # 查看容器 IP 地址

# 七、删除容器
docker rm $CONTAINER_ID/NAME         # 删除指定的容器。留神,只能删除进行的容器
docker rm `docker ps -a -q`          # 删除所有容器:

部署利用

1 MySQL 部署

docker pull mysql       # 拉取 mysql 镜像
docker images           # 查看镜像
# 创立 MySQL 容器
docker run -di --name pinyougou_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql  
# -p 代表端口映射,格局为  宿主机映射端口: 容器运行端口
# -e 代表增加环境变量  MYSQL_ROOT_PASSWORD 是 root 用户的登陆密码
# 进入 mysql 容器
docker exec -it pinyougou_mysql /bin/bash    
mysql -u root -p        # 登陆 mysql

2 tomcat 部署

docker pull tomcat:7-jre7    # 拉取 tomcat 镜像
# 创立 tomcat 容器
docker run -di --name=pinyougou_tomcat -p 9000:8080 -v /usr/local/myhtml:/usr/local/tomcat/webapps --privileged=true tomcat:7-jre7
# - v 示意地址映射 

部署 web 利用。批改 cas 零碎的配置文件,批改数据库连贯的 url

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
  p:driverClass="com.mysql.jdbc.Driver"
  p:jdbcUrl="jdbc:mysql://172.17.0.6:3306/pinyougoudb?characterEncoding=utf8"
  p:user="root"
  p:password="123456" />

测试:地址栏输出:http://192.168.247.135:9000/cas/login

3 Nginx 部署

# 拉取 Nginx 镜像
docker pull nginx
# 创立 Nginx 容器
docker run -di --name=pinyougou_nginx -p 80:80  nginx /bin/bash
# 测试 Nginx。浏览器地址栏输出:http://192.168.247.135
# 从容器拷贝配置文件到宿主机
docker cp pinyougou_nginx:/etc/nginx/nginx.conf nginx.conf

编辑 nginx.conf,增加反向代理配置

upstream tomcat-cas {server 172.17.0.7:8080;}
server {
    listen 80;
    server_name passport.pinyougou.com;
    location / {
        proxy_pass http://tomcat-cas;
        index index.html index.htm;
    }
}
# 将批改后的配置文件拷贝到容器
docker cp nginx.conf  pinyougou_nginx:/etc/nginx/nginx.conf
# 重新启动容器
docker restart pinyougou_nginx
# 设置域名指向,host 文件:192.168.247.135 passport.pinyougou.com
# 浏览器测试:http://passport.pinyougou.com/cas/login

4 Redis 部署

# 拉取 Redis 镜像
docker pull redis
# 创立 Redis 容器
docker run -di --name=pinyougou_redis -p 6379:6379 redis
# 客户端测试,在你的本地电脑命令提示符下,用 window 版本 redis 测试:redis-cli -h 192.168.247.135

备份与迁徙

# 容器保留为镜像
docker commit pinyougou_nginx mynginx
# pinyougou_nginx 是容器名称
# mynginx 是新的镜像名称
# 此镜像的内容就是你以后容器的内容,接下来你能够用此镜像再次运行新的容器

# 镜像备份
docker  save -o mynginx.tar mynginx
# -o 输入到的文件
# 执行后,运行 ls 命令即可看到打成的 tar 包

# 镜像复原与迁徙
# 首先咱们先删除掉 mynginx 镜像
# 而后执行此命令进行复原
docker load -i mynginx.tar
# -i 输出的文件
# 执行后再次查看镜像,能够看到镜像曾经复原 

正文完
 0