Docker是一个快速构建,运行,管理应用的工具
传统基于linux安装程序较为复杂繁琐,使用docker可以
docker 无权限问题
报错:
[yichen@bogon ~]$ docker images
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/json": dial unix /var/run/docker.sock: connect: permission denied
解决命令:
sudo chown root:docker /var/run/docker.sock # 修改docker.sock权限为root:docker
sudo groupadd docker # 添加docker用户组
sudo gpasswd -a $USER docker # 将当前用户添加至docker用户组
newgrp docker
docker run -d \ #
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=ctrl \
mysql
通过这样一个命令就能实现mysql的下载直接到运行
Docker进行安装应用时,会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身,还包括应用所运行的环境,配置,系统函数库,Docker在运行景象时会创建一个隔离环境,称为容器(container)。
只要安装好了docker,docker的镜像能够忽略操作系统的差异直接进行部署运行,因为所有跟系统,环境相关的部分,docker镜像中都是包含的
不同的容器之间是相互隔离的,不会相互产生影响,也不会因为需求不同的环境出现问题
命令解读
docker run -d \ #
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=ctrl \
mysql
- docker run:创建并运行一个容器,-d让容器在后台运行
- --name : 为容器起名,必须唯一
- -p 3306:3306:设置端口映射 前者为宿主机端口,后者为容器内端口
- -e KEY=Value : 设置环境变量,具体参数可以查看镜像官方文档
- mysql : 指定运行的镜像名
- 镜像名一般由两部分组成:[repository]:[tag]
- repository为镜像名
- tag为镜像版本
- 如果不写名称,默认为最新版本
docker save -o nginx.tar nginx
将镜像保存为其他文件
-o 想要得到的文件名 镜像名
docker load -i nginx.tar
将其他类型文件加载为镜像
-i 想要加载的文件名
docker rmi 镜像名
移除镜像
docker rm 容器名
移除容器
docker exec 容器名
进入容器
docker ps --format 格式参数
可以进行简化
查看容器
给常用Docker命令起别名,方便我们访问:
# 修改/root/.bashrc文件
vi /root/.bashrc
内容如下:
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
然后,执行命令使别名生效
source /root/.bashrc
数据卷
数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁
因为容器是对外隔离的,想要修改容器内文件需要进入到容器内部,但容器内的环境和函数库是精简到极致的,所以操作不方便。
使用数据卷与主机文件系统的目录进行映射,然后再使数据卷与容器内部的文件目录进行挂载
docker就实现了宿主机目录和容器内目录的双向绑定,在其中一侧所进行的操作都会在另一侧映射出来
数据卷挂载,在执行docker run命令时,使用-v 数据卷:容器内目录 可以完成数据卷挂载
当创建容器时,如果挂载了数据卷且数据卷不存在,会自动创建数据卷
如果创建容器时没有完成数据卷挂载,就无法再进行挂载了
容器的挂载还有第二种方式,即基于本地目录直接挂载
语法与数据卷挂载类似,区别在于-v参数之后不写数据卷,直接写本地目录即可