CentOS7安装Docker
#yum安装gcc相关
yum -y install gcc
yum -y install gcc-c++
#安装需要的软件包
yum install -y yum-utils
#设置stable镜像仓库(阿里云)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#更新yum软件包索引
yum makecache fast
#安装DOCKER CE
yum -y install docker-ce docker-ce-cli containerd.io
#启动docker
systemctl start docker
#测试
docker version
#卸载
systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
mkdir -p /etc/docker
vim /etc/docker/daemon.json
#写内容,阿里云
{
"registry-mirrors": ["https://{自已的编码}.mirror.aliyuncs.com"]
}
启动类命令:
启动docker:systemctl start docker
停止docker:systemctl stop dokcer
重启docker:systemctl restart dokcer
查看docker状态:systemctl status docker
开机启动:systemctl enable docker
查看docker概要信息:docker info
查看docker总体帮助文档:docker --help
查看docker命令帮助文档:docker 具体命令 --help
镜像类命令:
docker images [OPTIONS]:列出本地主机上的镜像
-
-a:列出本地所有的镜像(含历史映像层);docker images -a
-
-q:只显示镜像ID;docker images -q
docker search [OPTIONS] [镜像名称]:在镜像仓库搜索某个镜像
-
--limit:只列出N个镜像,默认25个;docker search --limit 5 redis
docker pll [镜像名称]:下载镜像
-
[:TAG]:tag是镜像版本,没有就代表最新版本;docker pull redis:6.0.8
docker system df:查看镜像/容器/数据卷所占的空间
docker rmi [OPTIONS] [镜像名称/ID]:删除镜像
-
-f:强制删除;docker rim -f redis;docker rmi -f $(docker images -qa)
容器类命令:
docker run [OPTIONS] [容器名称/ID] [COMMAND] [ARG...]:新建+启动容器
-
--name="容器新名字":为容器指定一个名称;docker run -d --name="redis1" redis
-
-d:后台运行容器并返回容器ID,也即启动守护式容器(后台运行); docker run -d --name="redis1" redis
-
-i:以交互模式运行容器,通常与-t同时使用;docker run -it ubuntu
-
-t:为容器重新分配一个伪输入终端,通常与-i同时使用;docker run -it ubuntu
-
-it:也即启动交互式容器(前台有伪终端,等待交互);docker run -it ubuntu
-
-P:随机端口映射,大写P
-
-p:指定端口映射,小写p;docker run -d redis -p 6379:6379
-
docker run -it ubuntu /bin/bash:启动交互式容器,使用镜像ubuntu :latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
docker ps [OPTIONS]:查看容器
-
-a:列出当前所有正在运行的容器+历史上运行过的;docker ps -a
-
-l:显示最近创建的容器;docker ps -l
-
-n:显示最近n个创建的容器;docker ps -n
-
-q:静默模式,只显示容器编号;docker ps -q
退出容器
-
exit:run进去容器,exit退出,容器停止
-
ctrl+p+q:run进去容器,ctrl+p+q退出,容器不停止
docker start [容器名称/id]:启动已停止运行的容器;docker start redis
docker restart [容器名称/id]:重启容器;docker restart redis
docker stop [容器名称/id]:停止容器;docker stop redis
docker kill [容器名称/id]:强制停止容器;docker kill redis
docker rm [容器名称/id]:删除已停止的容器;docker rm redis
-
docker rm -f $(docker ps -a -q);一次性删除多个容器实例
-
docker ps -a -q | xargs docker rm ;一次性删除多个容器实例
docker logs [容器ID]:查看容器日志
docker top [容器ID]:查看容器内运行的进程
docker inspect [容器ID]:查看容器内部细节
进入正在运行的容器并以命令行交互:
-
docker exec -it [容器ID] /bin/bash;exec是在容器中打开新的终端,并且可以启动新的进程,用exit退出,不会导致容器停止
-
docker attach [容器ID];attach直接进入容器启动命令的终端,不会启动新的进程,用exit退出,不会导致容器停止
docker cp [容器ID]:[容器内路径] [目的主机路径]:从容器内拷贝文件到主机上;docker cp 324dsfsdf3:/a.txt /opt
docker export [容器ID] > [文件名.tar]:xport导出容器的内容作为一个tar归档文件;docker export 32423ewrwe > abcd.tar
cat [文件名.tar] | docker import - [镜像用户/镜像名:版本号]:import从tar包中的内容创建一个新的的文件系统再导入为镜像;cat adcd.tar | docker import - jack/ubuntu:0.1
Docker镜像commit操作案例
docker commit提交容器副本使之成为一个新的镜像
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
docker commit -m="vim cmd add" -a="wza" 4a7f8d28f941 myubuntu:0.1
数据卷案例
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
docker run -it --name="myubuntu2" --privileged=true -v /tem/host_data:/tem/docker/docker_data myubuntu:0.1
//查看数据卷是否挂载成功
//docker inspect [容器ID]
docker inspect dsw34rczxcs
"Mounts": [
{
"Type": "bind",
"Source": "/tem/host_data",
"Destination": "/tem/docker/docker_data",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
Docker挂载主机目录访问如果出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个--privileged=true参数即可
如果是CentOS7安全模块会比之前系统版本加强,不安全的会先禁止,所以目录挂载的情况被默认为不安全的行为,
在SELinux里面挂载目录被禁止掉了额,如果要开启,我们一般使用--privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题,也即
使用该参数,container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限。
docker安装tomcat
docker pull tomcat
docker run -d -p 8080:8080 tomcat
如果访问tomcat首页失败
1、可能没有映射端口或者没有关闭防火墙,服务器8080端口是否开启
2、把webapps.dist目录换成webapps(这是新版tomcat导致的问题)
可以使用老版本镜像安装就不会出错
docker pull billygoo/tomcat8-jdk8 docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8
docker安装mysql
docker pull mysql:5.7
#3个-v 分别挂载了日志、数据、配置到主机的目录,--privileged=true权限,-e MYSQL_ROOT_PASSWORD设置密码
docker run -d -p 3306:3306 --privileged=true -v /wzause/mysql/log:/var/log/mysql -v /wzause/mysql/data:/var/lib/mysql -v /wzause/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
1、外部没法访问,同样需要在服务器的防火墙里配置端口
2、docker里的mysql无法插入中文
#查看字符集 show variables like 'character%';
- 在本机挂载的/wzause/mysql/conf下新建my.cnf,通过容器卷同步给mysql容器实例,将以下内容写入到my.cnf,写入后记得重启容器
[client] default_character_set=utf8 [mysqld] collation_server = utf8_general_ci character_set_server = utf8
docker安装redis
docker pull redis
#在CentOS宿主机下新建目录/app/redis
mkdir -p /app/redis
#/app/redis目录下创建redis.conf文件,将默认配置复制进去
vim redis.conf
#redis-server /etc/redis/redis.conf 指定使用我们自己配置的redis.conf文件
docker run -p 6379:6379 --name redis --privileged=true -v /app/redis/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -d redis redis-server /etc/redis/redis.conf
1、外部没法访问,同样需要在服务器的防火墙里配置端口
2、默认redis.conf配置文件内容网上找一下
3、修改redis.conf
- 开启redis验证(可选) requirepass 123
- 允许redis外地连接 (必须) 注释掉 # bind 127.0.0.1
- daemonize no
- 开启redis数据持久化 appendonly yes(可选)