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

装置与启动

# 一、装置Dockercurl -sSL https://get.daocloud.io/docker | sh    # 应用国内 daocloud 一键装置命令:docker -v                                        # 查看Docker版本# 二、启动与进行Docker# *systemctl* 命令是零碎服务管理器指令,它是 service 和 chkconfig 两个命令组合。systemctl start docker    # 启动dockersystemctl stop docker     # 进行dockersystemctl restart docker  # 重启dockersystemctl 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-reloadsystemctl 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 输出的文件# 执行后再次查看镜像,能够看到镜像曾经复原