前言:
docker所有命令都需要在命令前面加 docker
系统命令
// 启动docker
systemctl start docker
systemctl status docker
// 开机启动
systemctl enable docker
// 启动镜像,创建容器
run 镜像名
帮助命令
// 版本
version
// docker系统信息,包括镜像和容器的数量
info
// 帮助命令
命令 --help
镜像命令
// 查看所有镜像
images
[root@zhuowang ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 13 months ago 13.3kB
REPOSITORY // 镜像的仓库源
TAG // 镜像的标签
IAMGE ID // 镜像的id
// 参数
-q // 只显示镜像的id
// 修改镜像名称
docker tag 镜像id 镜像名:版本
// 搜索镜像(在docker hub)
search mysql
// 参数,过滤
--filter=STARS=3000
// 下载镜像,不指定版本默认最新
pull 镜像名:版本
// 其中会输出一个这个
// docker.io/library/mysql:latest
pull 镜像名 等价 pull docker.io/library/mysql:latest
// 删除镜像
rmi -f 镜像id/名称
rmi -f 镜像id 镜像id
// 删除全部镜像
rmi -f $(docker images -aq)
容器命令
说明:我们有了镜像才可以创建容器。
// 下载centos镜像
docker pull centos
// 新建容器并启动
run 参数 image
// 参数
--name="Name" // 容器名字 tomcat01 tomcat02
-d // 后台方式运行,并没有运行服务的话会自动关闭容器
-i // 表示运行容器
-it // 使用交互方式运行,进入容器查看内容
-p // 指定容器的端口
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
容器端口
-P // 随机指定端口
// docker run -itd --net docker-compose_default --ip 172.18.0.7 kibana
--ip // 使用固定ip启动容器
// 从容器中退出主机
exit // 退出并停止容器(实践中这也不退出)
Crtl + p + q // 退出但不停止容器
// 查看正在运行的容器
ps
ps -f status=exited // 查询已经退出的容器
// 参数
-a // 查看所有的容器 包括历史未运行容器
-n=1 // 显示最近创建的一个容器
-q // 只显示容器的编号
-f // 过滤
// 删除容器
rm 容器id
rm -f $(docker ps -aq) // 删除所有容器 -f 强制删除
// 启动和停止容器
start 容器id
restart 容器id
stop 容器id
kill 容器id // 强制停止
// 查看日志
logs -tf --tail 10 容器id
t // 显示日志
f // format 会带时间戳
--tail // 显示10行
docker logs --since 225m 4261ce7f5c14 >>file.txt // 将最近225分钟的日志写到file.txt文件
// 死循环写入日志
run -d centos /bin/sh -c "while true;do echo kuangshen;sleep 1;done"
// 查看容器中进程信息
top 容器id
// 查看容器的元信息(容器本身的参数信息,ip,挂载信息等)
inspect 容器id
// 进入当前正在运行的容器,容器的名字也可以
exec -it 容器id /bin/bash // 进入容器后开启一个新的终端,可以在里面操作(常用)
attach 容器id // 进入容器正在执行的终端
// 复制不能直接把文件从外部拷贝到容器中,得通过宿主机
// 从容器内拷贝文件到宿主机上,反之,则把命令反过来
cp 容器id:容器内路径 目的主机路径
// 查看cpu的状态
stat
// 服务器启动自动启动redis
docker update redis --restart=always
ps -f 过滤条件
用等于号连接
docker 部署应用
docker部署mysql
docker pull mysql:5.7
// -e 配置环境的时候需要加,这儿是配置mysqp密码
docker run -di -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
docker exec -it ca33156ee4e7 /bin/bash
mysql -h localhost -u root -p root
docker部署tomcat
docker pull tomcat:9.0.43
// iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3343
// 遇到这个错误重启docker就行,原因未知
docker run -d -p 3355:8080 --name tomcat01 tomcat
// 此时外部访问报404,
// 原因是阿里云镜像是最简版,webapps是空的,进入容器
cp -r webapps.dist/* webapps
docker部署es
- es 暴露的端口很多
- es 十分耗内存
- es 的数据一般需要放置到安全目录!挂载
// 增加内存限制,否则es占用内存很大,容易导致docker死机
// -e 环境配置修改
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
curl localhost:9200
安装jdk
- 首先去找jdk的tar包,然后解压,官方是收费的
- 配置环境变量
vi /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_171/
export PATH=$JAVA_HOME/bin:$PATH
// 刷新配置文件
source /etc/profile
// 配置成功
java -version
镜像
可视化的镜像管理
- portainer
// 不重要,看看就行
docker run -d -p 8088:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
// 进去之后设置用户密码,然后选择local
- Rancher(CI/CD持续集成再用这个)
commit镜像
// 提交容器成为一个新的镜像
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
镜像备份/打包/解压
// -o 输出到文件
// 执行完成后就可看见xxx.tar
// 使用镜像id有可能导致解压为镜像的时候名字和版本都是none
// 使用 名字:版本 即可解决
docker save -o xxx.tar 镜像id
// tar包解压为镜像
// -i 输入的文件
docker load -i tar包名
转载自:
https://www.bilibili.com/video/BV1og4y1q7M4?from=search&seid=18423066343999250308
别开窗,我还没见到阳光,天就算不亮。
云边有个小卖部
张嘉佳