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=mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
# -p 代表端口映射,格式为 宿主机映射端口:容器运行端口
# -e 代表添加环境变量 MYSQL_ROOT_PASSWORD是root用户的登陆密码
# 进入mysql容器
docker exec -it mysql /bin/bash
mysql -u root -p # 登陆mysql
2 tomcat部署
docker pull tomcat:9-jre8 # 拉取tomcat镜像
# 创建tomcat容器
docker run -di --name=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/andydb?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=nginx -p 80:80 nginx /bin/bash
# 测试Nginx。 浏览器地址栏输入: http://192.168.247.135
# 从容器拷贝配置文件到宿主机
docker cp nginx:/etc/nginx/nginx.conf nginx.conf
编辑nginx.conf,添加反向代理配置
upstream tomcat-cas {
server 172.17.0.7:8080;
}
server {
listen 80;
server_name passport.andy.com;
location / {
proxy_pass http://tomcat-cas;
index index.html index.htm;
}
}
# 将修改后的配置文件拷贝到容器
docker cp nginx.conf nginx:/etc/nginx/nginx.conf
# 重新启动容器
docker restart pinyougou_nginx
# 设置域名指向 ,host文件:192.168.247.135 passport.andy.com
# 浏览器测试:http://passport.andy.com/cas/login
4 Redis部署
# 拉取Redis镜像
docker pull redis
# 创建Redis容器
docker run -di --name=redis -p 6379:6379 redis
# 客户端测试,在你的本地电脑命令提示符下,用window版本redis测试:redis-cli -h 192.168.247.135
备份与迁移
# 容器保存为镜像
docker commit nginx mynginx
# nginx是容器名称
# mynginx是新的镜像名称
# 此镜像的内容就是你当前容器的内容,接下来你可以用此镜像再次运行新的容器
# 镜像备份
docker save -o mynginx.tar mynginx
# -o 输出到的文件
# 执行后,运行ls命令即可看到打成的tar包
# 镜像恢复与迁移
# 首先我们先删除掉mynginx镜像
# 然后执行此命令进行恢复
docker load -i mynginx.tar
# -i 输入的文件
# 执行后再次查看镜像,可以看到镜像已经恢复
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。