Docker 常用命令
文章目录
常规命令
clear# 清屏
exit #退出
mkdir -p /root/mysql #创建目录
mkdir -p #递归创建目录
touch /root/mysql/abc.txt #创建文件
:wq # vim 文档里,保存退出
:w! # 不保存,退出
centos7 扩容
centos7 安装 docker
安装Docker
Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。
Docker CE 分为 stable
test
和 nightly
三个更新频道。
官方网站上有各种环境下的 安装指南,这里主要介绍 Docker CE 在 CentOS上的安装。
CentOS安装Docker
Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10, CentOS 7 满足最低内核的要求,所以我们在CentOS 7安装Docker。
卸载(可选)
如果之前安装过旧版本的Docker,可以使用下面命令卸载:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
docker-ce
安装docker
首先需要大家虚拟机联网,安装yum工具
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken
然后更新本地镜像源:
# 设置docker镜像源
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
然后输入命令:
yum install -y docker-ce
docker-ce为社区免费版本。稍等片刻,docker即可安装成功。
启动docker
Docker应用需要用到各种端口,逐一去修改防火墙设置。非常麻烦,因此建议大家直接关闭防火墙!
启动docker前,一定要关闭防火墙后!!
启动docker前,一定要关闭防火墙后!!
启动docker前,一定要关闭防火墙后!!
# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
通过命令启动docker:
systemctl start docker # 启动docker服务
systemctl stop docker # 停止docker服务
systemctl restart docker # 重启docker服务
# docker 服务开机自启动命令 systemctl enable docker.service # 关闭docker 服务开机自启动命令 systemctl disable docker.service
然后输入命令,可以查看docker版本:
docker -v
配置镜像加速
docker官方镜像仓库网速较差,我们需要设置国内镜像服务:
参考阿里云的镜像加速文档:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
配置镜像加速器
针对Docker客户端版本大于 1.10.0 的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://2jr6m724.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
直接运行上述命令即可,
(https://2jr6m724.mirror.aliyuncs.com)
可替换为自己的阿里云docker镜像加速器
CentOS7安装DockerCompose
下载
Linux下需要通过命令下载:
# 安装
curl -L https://github.com/docker/compose/releases/download/1.29.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
上传到/usr/local/bin/
目录也可以。
修改文件权限
修改文件权限:
# 修改权限
chmod +x /usr/local/bin/docker-compose
Base自动补全命令:
# 补全命令
curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
如果这里出现错误,需要修改自己的hosts文件:
echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts
让外网访问2375端口
## 修改docker服务文件
vi /lib/systemd/system/docker.service
## 将原来的ExecStart前面加上#号注释掉,然后再下面追加一行
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
## 重新加载配置
systemctl daemon-reload
## 重启docker服务
systemctl restart docker.service
Docker镜像仓库
搭建镜像仓库可以基于Docker官方提供的DockerRegistry来实现。
简化版镜像仓库
Docker官方的Docker Registry是一个基础版本的Docker镜像仓库,具备仓库管理的完整功能,但是没有图形化界面。
搭建方式比较简单,命令如下:
docker run -d \
--restart=always \
--name registry \
-p 5000:5000 \
-v registry-data:/var/lib/registry \
registry
命令中挂载了一个数据卷registry-data到容器内的/var/lib/registry 目录,这是私有镜像库存放数据的目录。
访问http://YourIp:5000/v2/_catalog 可以查看当前私有镜像服务中包含的镜像
带有图形化界面版本
使用DockerCompose部署带有图象界面的DockerRegistry,命令如下:
version: '3.0'
services:
registry:
image: registry
volumes:
- ./registry-data:/var/lib/registry
ui:
image: joxit/docker-registry-ui:static
ports:
- 8080:80
environment:
- REGISTRY_TITLE=qwerqwe
- REGISTRY_URL=http://registry:5000
depends_on:
- registry
镜像命令
docker 分,镜像 和 容器
镜像在远程仓库, 容器在本地运行
docker images
#查询当前机器上,有多少个镜像,版本是什么,等信息
docker search tomcat
#查询远端仓库镜像 tomcat
docker pull mysql:5.6
#下载远端仓库镜像,mysql 版本为5.6
docker pull mysql
#可以不写版本,默认下载最新版 latest
docker rmi mysql
#删除指定的 镜像
docker ps
#查询当前机器上有多少正在运行的容器
docker ps -a
#查询当前机器上,有多少容器,包括已经关闭的容器
docker run -id -p 3307:3306 --name=c_mysql -v /root/mysql/conf:/etc/mysql/conf.d -v /root/mysql/logs:/logs -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6
#-v 挂载
#访问本主机的 /root/mysql/conf
#等于是 访问容器的 /etc/mysql/conf.d
#删除容器,也不会删除容器内数据
docker run -id -p 3307:3306 --name=c_mysql -v /root/mysql/conf:/etc/mysql/conf.d -v /root/mysql/logs:/logs -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6
# -p 映射端口号
#3307 是本主机端口,
#3306 是容器端口号,
#访问本主机3307,等于说访问 容器 3306
容器命令
部署 pgsql
docker pull postgres:14.2
docker run --name c_postgres \
--restart=always \
-e POSTGRES_PASSWORD=123456 \
-p 5432:5432 \
-v /root/postgresql/:/var/lib/postgresql/data \
-d postgres:14.2
部署 mysql
docker pull mysql:5.6
创建docker容器
docker run -id -p 3306:3306 --name=c_mysql --restart=always -v /root/mysql/conf:/etc/mysql/conf.d -v /root/mysql/logs:/logs -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
说明:
docker run 启动 后 加命令 -i 以交互模式运行容器,通常与 -t 同时使用; -t 为容器重新分配一个伪输入终端,通常与 -i 同时使用; -d 后台运行容器,并返回容器ID; -p 3307:3306
容器里的mysql3306端口,映射到主机3307端口,web访问3307,就等于是访问容器的3306端口.
–name=c_mysql
给运行的容器起个名字为c_mysql,名字随便,不可重复
$pwd : 获取当前路径,例如在 /root/data3/ 目录下, $pwd/conf:/etc/myql/conf.d 就等于 /root/data3/conf:/etc/myql/conf.d 为了方便,这里用$pwd 代替了
-v $pwd/conf:/etc/myql/conf.d
将当前主机目录下conf/my.cof挂载到容器的/etc/mysql/my.cnf配置目录
(c_mysql容器内,/etc/mysql/my.cnf目录,等于,主机conf/my.cof目录)
-v $pwd /logs:/logs
将当前主机目录的/logs目录,挂载到容器的/logs 日志目录
-e MYSQL_ROOT_PASSWOED=123456
初始化root用户密码
mysql:5.6
指的是:用mysql:5.6的版本
停止docker 容器
docker stop c_mysql
#这里的 c_mysql 是自己起的名字
启动容器
docker start c_mysql
#这里的 c_mysql 是自己起的名字
删除 容器
docker rm c_mysql
mkdir ~/mysql
cd ~/mysql
#此时,处于 /root/mysql/ 目录下 $pwd 就是路径
进入容器
进入c_mysql容器前,先看下本机ip,
ip addr
#获得本机ip 192.168.0.110
docker exec -it c_mysql /bin/bash
#进入容器 c_mysql
登陆mysql
mysql -uroot -p123456
#这里的123456 是之前设置的
mysql 部署完毕,
DataGrip登陆mysql
部署tomcat
docker pull tomcat
# 拉取镜像
mkdir ~/tomcat
cd ~/tomcat
#创建目录
# 此时,在/root/tomcat 目录下
docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat
mkdir /root/tomcat/text
cd /root/tomcat/text
vim holle.html
保存退出
:wq
部署Nginx
#查询镜像
docker search nginx
#拉取镜像
docker pull nginx
#创建目录 /root/nginx
mkdir /root/nginx/conf
#进入
cd /root/nginx/conf
#编辑新文件
vim nginx.conf
#以下为文件内容
user nginx; #设置nginx服务的系统使用用户
worker_processes 1; #工作进程数
error_log /var/log/nginx/error.log warn; #nginx的错误日志
pid /var/run/nginx.pid; #nginx启动时候的pid
events {
worker_connections 1024; #每个进程允许的最大连接数
}
http { #http请求配置,一个http可以包含多个server
#定义 Content-Type
include /etc/nginx/mime.types;
default_type application/octet-stream;
#日志格式 此处main与access_log中的main对应
#$remote_addr:客户端地址
#$remote_user:http客户端请求nginx认证的用户名,默认不开启认证模块,不会记录
#$timelocal:nginx的时间
#$request:请求method + 路由 + http协议版本
#status:http reponse 状态码
#body_bytes_sent:response body的大小
#$http_referer:referer头信息参数,表示上级页面
#$http_user_agent:user-agent头信息参数,客户端信息
#$http_x_forwarded_for:x-forwarded-for头信息参数
log_format main '$http_user_agent' '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#访问日志,后面的main表示使用log_format中的main格式记录到access.log中
access_log /var/log/nginx/access.log main;
#nginx的一大优势,高效率文件传输
sendfile on;
#tcp_nopush on;
#客户端与服务端的超时时间,单位秒
keepalive_timeout 65;
#gzip on;
server { #http服务,一个server可以配置多个location
listen 80; #服务监听端口
server_name localhost; #主机名、域名
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html; #页面存放目录
index index.html index.htm; #默认页面
}
#error_page 404 /404.html;
# 将500 502 503 504的错误页面重定向到 /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html { #匹配error_page指定的页面路径
root /usr/share/nginx/html; #页面存放的目录
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
include /etc/nginx/conf.d/*.conf;
}
#进入
cd /root/nginx
#运行
docker run -id --name=c_nginx \
-p 80:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
> -v $PWD/logs:/var/log/nginx \
> -v $PWD/html:/usr/share/nginx/html \
> nginx
部署redis
docker run -id --name=c_redis -p 6379:6379 redis:5.0
Dockerfile文件
consul集群
参考文献
https://www.cnblogs.com/miaoying/p/10303067.html
####----虚拟机服务器上
#启动第一台
docker run --name consul1 -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600 consul agent -server -bootstrap-expect 2 -ui -bind=0.0.0.0 -client=0.0.0.0
#查看第一台ip
docker inspect --format '{{ .NetworkSettings.IPAddress }}' consul1
##得到第一台的ip为 172.17.0.2
#启动第二台
docker run --name consul2 -d -p 8501:8500 consul agent -server -ui -bind=0.0.0.0 -client=0.0.0.0 -join 172.17.0.2
#启动第三台
docker run --name consul3 -d -p 8502:8500 consul agent -server -ui -bind=0.0.0.0 -client=0.0.0.0 -join 172.17.0.2
####----本地win10,启动第一个,cmd ,192.168.0.106是我局域网ip
consul agent -client=0.0.0.0 -bind=192.168.0.106 -data-dir /etc/consul.d -node=client-1
####----本地win10,启动第二个,cmd ,192.168.0.111 是虚拟机ip,一个虚拟机部署了3台server
consul join 192.168.0.111
访问 192.168.0.111:8500