常用命令
- 获取镜像
docker pull [软件名][:版本号]
docker pull ubuntu #拉取ubuntu镜像
- docker镜像的查看
docker images | grep mongo #查看mongo的镜像
docker images | grep ubuntu #查看ubuntu镜像
- 启动容器
docker run [选项] 镜像名 命令 [参数]
- 选项说明:
-d: 后台运行容器(守护进程) 并返回容器ID
-i: 以交互模式运行容器,通常与-t同时使用
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
-p: 指定端口映射,格式:主机(宿主)端口:容器端口
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-v:绑定一个数据卷
-h “mars”: 指定容器的hostname;
-e username=“ritchie”: 设置环境变量;
-m :设置容器使用内存最大值和最小值,一般设置成一样;
–env-file=[]: 从指定文件读入环境变量;
–cpuset=“0-2” or --cpuset=“0,1,2”: 绑定容器到指定CPU运行;
–volume: 和-v一样,绑定一个数据卷
–name=mongo-lb: 为容器指定一个名称
–privileged=true 提升容器内权限,可读可写
–restart=always 开机自启动
# 以后台方式启动mongodb容器,并且端口映射到本地27017
docker run -itd --name mongo -p 27017:27017 mongo:latest
# 主机的目录~/dockerdata/mysql映射到容器的/data
docker run -d --name mysql57 -p 3309:3309 -v ~/dockerdata/mysql:/data mysql:5.7
# 使用镜像 nginx:latest,以后台模式启动一个容器,绑定容器的8080端口,并将其映射到本地主机127.0.0.1的80端口上,主机的目录~/dockerdata/nginx 映射到容器的 /data;权限设置为可读可写。
docker run -p 127.0.0.1:80:8080/tcp -v ~/dockerdata/nginx:/data -d nginx:latest --privilege
- 更新容器的配置
docker update [选项] [容器1] [容器2] [容器3]
# 更新mongodb容器的配置,设置为开机自启动
#查看mongo容器的id
docker ps | grep mongo
docker update --restart always 0e61865a256a cda1f1c347ba mongodb redis
- 查看docker某个容器的日志记录
docker logs -f kibana7
- 重名容器名
docker rename [原容器名] [新容器名]
docker rename redis-new redis-slave
- 列出容器
docker ps -a #列出所有容器
docker ps -l #显示最近的容器
安装portainer
docker管理平台
docker run -d -p 19000:9000 --name=portainer \
--restart=always --privileged=true \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /data/portainer/data:/data \
portainer/portainer-ce:latest
安装busybox
busybox其实是一个小型的 unix 环境,完整的发行版包含近 400 个最常用的命令。因为一般的容器的linux命令不全,所以常将它来做linux基础版本,做一些测试使用
- 安装
docker run -it --name my-busybox --restart=always -d busybox:latest
- 使用
进入my-busybox容器的shell,注意这里不能使用/bin/bash,只能用sh,也就是/bin/sh的缩写
docker exec -it my-busybox sh
安装nginx
数据卷采用bind mounts模式
docker run -itd --name nginx -p 80:80 \
-v ~/dockerdatas/nginx/www:/usr/share/nginx/html -v ~/dockerdatas/nginx/conf/conf.d:/etc/nginx/conf.d \
--privileged=true --restart=always nginx:latest
安装redis
–privileged=true //给容器内root权限
–restart=always //随docker自启动
–requirepass “123456” //redis设置密码为123456
–appendonly yes //表示开启持久化
数据存宿主机模式:
通过配置文件启动,可以在宿主机修改配置文件
docker run -itd -p 6379:6379 --name=redis --privileged=true --restart=always \
-v ~/dockerdata/redis/redis.conf:/etc/redis/redis.conf \
-v ~/dockerdata/redis/data:/data \
-e LANG=C.UTF-8 redis:latest redis-server /etc/redis/redis.conf
数据存数据卷模式
在运行容器时,带上密码
docker run -itd -p 6379:6379/tcp --name=redis --privileged=true --restart always \
-v redis-data:/data \
-v redis-conf:/etc/redis redis:latest -e LANG=C.UTF-8 \
--appendonly yes --requirepass "123456"
安装rabbitmq
方式一:外网不能访问的安装
户和密码都是通过默认的guest访问,这种只能在局域网内访问,远程不能被访问,并手动启动rabbitmq_management
# 启动一个容器,没有镜像就去拉取
docker run -itd -p 15672:15672 -p 5672:5672 --name=rabbitmq \
--restart=always --privileged=true \
-v ~/dockerdatas/rabbitmq-data:/var/lib/rabbitmq \
rabbitmq:latest
能在浏览器上访问需要启动插件
docker exec -it 容器id /bin/bssh
rabbitmq-plugins enable rabbitmq_management
服务随服务器自启动
docker container update --restart=always [容器id]
方式二:基于指定用户名密码的安装
通过环境变量添加用户和密码,并基于rabbitmq-management镜像启动,不需要去手动再启动浏览器插件
# 镜像不存在就自动拉取
docker run -itd -p 15672:15672 -p 5672:5672 --name=rabbitmq \
--restart=always --privileged=true \
-v ~/dockerdatas/rabbitmq-data:/var/lib/rabbitmq \
-e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=Admin123 \
rabbitmq:3-management
给远程访问的用户名授权
# 进入容器内
docker exec -it [容器id] /bin/bash
# 添加用户名:admin,密码:Admin123,上面已经指定了,这步省略
# rabbitmqctl add_user admin Admin123
# 给admin设置管理员角色
rabbitmqctl set_user_tags admin administrator
# 给admin用户设置所有权限
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
安装mysql
# "\"之后不能有空格,不然就会报错
docker run -itd --name=mysql-3306 -p 3306:3306 \
-v mysql-config:/etc/mysql/conf.d -v mysql-log:/logs -v mysql-data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD="CxfC3Q7wTY" -e LANG=C.UTF-8 \
--privileged=true --restart=always mysql:latest
安装mongodb
docker run -it --name=mongo \
-v mongo-data:/data/db -v mongo-config:/data/configdb \
--restart=always --privileged=true -p 27017:27017 \
-e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD="123456" \
-d mongo:latest --auth
修改密码
- 方法一:
由于密码都是在数据库中了,所以先把现有容器删除,然后建立一个不带–auth 的临时容器来作为数据容器,再从新连接上 mongodb
1.删除现有容器,保留数据卷
docker stop 现有容器id && docker rm 现有容器id
2.再建立一个免登陆的容器,数据卷一定要之前创建的数据卷,因为之前的密码都是存在数据库中去了,数据库文件在数据卷中的
docker run -it --name=mongo-27019 \
-v mongo-data27019:/data/db -v mongo-config27019:/data/configdb \
--restart=always --privileged=true -p 27019:27017 \
-d mongo:latest
3.修改密码
db.changeUserPassword('用户名','新密码');
4.再把免登陆的容器删除,再重新创建新容器,带上–auth 参数
docker stop 免登陆容器id && docker rm 免登陆容器id
docker run -it --name=mongo-27019 \
-v mongo-data27019:/data/db -v mongo-config27019:/data/configdb \
--restart=always --privileged=true -p 27019:27017 \
-d mongo:latest --auth
- 方法二:
基于mongodb6.0系列,使用的是mongosh,低版本使用mongo
# 进入容器的命令行
docker exec -it [mongo容器的名字或id] bash
# 进入bin目录
cd /usr/bin
# 连接mongodb,低版本是mongo
mongosh -u 用户名 -p 密码 --authenticationDatabase admin
# 切换到admin数据库
use admin
# 创建超级用户,在admin数据库中,我们需要创建一个具有管理员权限的超级用户。可以使用以下命令:
db.createUser({
user: "admin",
pwd: "密码",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
})
# 修改密码,完成超级用户的创建后,我们可以使用以下命令修改MongoDB的密码:
db.updateUser("admin", {pwd: "newpassword"})
# 退出
exit
# 最后一步,重启,我们需要重启MongoDB容器以应用密码修改。可以使用以下命令:
docker restart mongo
安装elasticsearch+kibana工具
使用镜像7.x系列,安装kibana之前,先安装elasticsearch
# 下载ES镜像,这里选择7.11.2版本,elasticsearch:7.11.2
docker pull elasticsearch:7.11.2
# 下载kibana镜像,版本和ES要一致
docker pull kibana:7.11.2
创建网络,方便ES7和kibana7进行连接
docker network create --subnet=172.18.0.0.0/16 [网络名]
docker network create --subnet=172.18.0.0/16 elastic
先启动ES7的容器,再启动kibana容器不然会报错
- 创建一个名字为ES7容器,以后台模式启动一个容器,绑定容器的web端口9200,服务端口9300,并且将其内存设置为1G,采用单点模式
docker run -d --name ES7 --net elastic --ip=172.18.0.2 \
-e "ES_JAVA_OPTS=-Xms1024m -Xmx1024m" -e "discovery.type=single-node" \
-p 9200:9200 -p 9300:9300 -d elasticsearch:7.11.2
- 创建一个名字为kibana7的容器,以后台模式启动一个容器,绑定容器的端口为5601,网络组和ES7容器一样并连接ES7来进行启动
docker run -p 5601:5601 --name kibana7 --net elastic -e "elasticsearch_url=http://172.18.0.2:9200" -d kibana:7.11.2
#这个时候去访问
http://127.0.0.1:5601/会出现连接失败的错误
# 那么进入kibana7容器终端,修改配置,修改成如图2所示
docker exec -it kibana7 /bin/bash #以/bin/bash的方式进入kiban7,去执行命令
vi /opt/kibana/config/kibana.yml
# 修改完成后,重启kibana容器
docker restart cda1f1c347ba
- 安装logstash
docker pull docker.elastic.co/logstash/logstash:7.11.2
docker run -it -d --name logstash --net elastic -p 5044:5044 docker.elastic.co/logstash/logstash:7.11.2
- 安装ES的管理工具elastic head
在启动elastich-Head的时候,如果elasticsearch设置了网络,那么它也要加入网络中去
docker pull mobz/elasticsearch-head:5
docker run -d -p 9100:9100 --name ES7hd --link 2b741f5a8ba8:ES7hd --net elastic docker.io/mobz/elasticsearch-head:5
- 对ES7容器的开始|停止|重启
docker [选项] 容器名|容器id
docker start dce25ddcc2d0
docker stop dce25ddcc2d0
docker restart nginx:latest
docker restart dce25ddcc2d0 #重启容器id为38f26a0d9394的服务
docker stats mongo #查看状态
- 从容器中拷贝文件到宿主机
在docker中如果因为配置修改错误引起服务启动不了,那么需要拷贝到宿主机,
# 将docker中把ES的配置拷贝到宿主机
docker cp ES7:/usr/share/elasticsearch/config/elasticsearch.yml ~/dockerdata/
# 在宿主机修改完,cp回docker
docker cp ~/dockerdata/elasticsearch.yml ES7:/usr/share/elasticsearch/config/