基于狂神视频手码制作的笔记摘录 – 感谢狂神无私讲解!
保持学习和实践!
关于Docker
放图一张 学完基础可以回过头重新理解这张图!
关于安装
1 yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2 yum -y install gcc
3 yum -y install gcc-c++
4 yum install -y yum-utils
5 yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
6 yum makecache fast
7 yum install docker-ce docker-ce-cli containerd.io
8 systemctl start docker
9 docker version
10 docker run hello-world
阿里云服务器镜像加速(非必须)
找到阿里的镜像加速器后按照以下步骤执行
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://c4kwo7rk.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker的常用命令
帮助命令
docker version
docker info
官网地址
https://docs.docker.com/engine/reference/commandline
镜像命令
docker images 查看所有本地镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
# 解释
REPOSITORY 仓库源
TAG 标签
IMAGE ID 镜像ID
CREATED 创建时间
SIZE 大小
# 可选项
-a, --all # 列出所有镜像
-q, --quiet # 显示镜像ID
docker search 搜索镜像
docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 10656 [OK]
mariadb MariaDB Server is a high performing open sou… 3997 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 779 [OK]
# 可选项
--filter=STARS=3000 # 搜索大于3000的镜像
docker pull 下载镜像
# 下载镜像 docker pull 镜像名[:tag]
[root@iZ2vc20ehn0q0ihrgccmd2Z /]# docker pull mysql
Using default tag: latest # 不写tag 默认最新
latest: Pulling from library/mysql
a076a628af6f: Pull complete # 分层下载 docker image核心
f6c208f3f991: Pull complete
88a9455a9165: Pull complete
406c9b8427c6: Pull complete
7c88599c0b25: Pull complete
25b5c6debdaf: Pull complete
43a5816f1617: Pull complete
1a8c919e89bf: Pull complete
9f3cf4bd1a07: Pull complete
80539cea118d: Pull complete
201b3cad54ce: Pull complete
944ba37e1c06: Pull complete
Digest: sha256:feada149cb8ff54eade1336da7c1d080c4a1c7ed82b5e320efb5beebed85ae8c #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真实地址
# 等价
docker pull mysql ==== docker pull docker.io/library/mysql:latest
docker rmi 删除镜像
docker rmi -f 镜像ID # 删除指定镜像
docker rmi -f 镜像ID 镜像ID 镜像ID 镜像ID # 删除多个指定镜像
docker rmi -f $(docker images -aq) #删除全部镜像
容器命令
ps: 有镜像才可以创建容器 下载新的centos 测试
docker pull centos
新建容器并启动
docker run [可选参数] image
# 参数说明
--name="name" 容器名字
-d 后台方式运行
-it 使用交互方式运行 进入容器查看内容
-p 指定容器端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
-p 随机指定端口
#测试 启动并进入容器
root@iZ2vc20ehn0q0ihrgccmd2Z ~]# docker run -it centos /bin/bash
[root@c89d1194aa03 /]# ls # 查看容器内的centos 基础版本 命令不完善
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
#从容器中退回主机
[root@c89d1194aa03 /]# exit
exit
[root@iZ2vc20ehn0q0ihrgccmd2Z ~]#
列出所有运行的容器
# docker ps 命令
-a #列出当前正在运行的容器+带出历史运行过的容器
-n=? #显示最近创建的容器
-q #显示容器编号
docker ps -a
退出容器
exit #直接退出容器
Ctrl + P + Q #容器不停止退出
删除容器
docker rm 容器id #删除指定容器
docker rm -f $(docker ps -aq) #删除所有容器
docker ps -a -q|xargs docker rm #删除所有容器
启动和停止容器的操作
docker start 容器ID
docker restart 容器ID
docker stop 容器ID
docker kill 容器ID
常用其他命令
后台启动容器
# docker run -d 镜像名
docker run -d centos
# docker ps 发现centos停止了
docker容器使用后台运行 必须要有一个前台进程 没有会自动停止
查看日志
docker logs -f -t --tail xx 容器ID
-tf #显示日志
--tail number #显示日志条数
docker logs -f -t --tail 10 e938a049e901
查看容器中的进程信息
# docker top 容器ID
docker top e938a049e901
查看镜像元数据
docker inspect 容器ID
进入当前正在运行的容器
# 通常容器都是使用后台方式运行 需要进入容器 修改一些配置
# 命令
docker exec -it 容器ID /bin/bash #进入容器后开启一个新的终端 可以在里面操作(常用)
# 方式二
docker attach 容器ID #进入容器正在执行的终端 不会启动新的进程
从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目的的主机路径
#测试
[root@iZ2vc20ehn0q0ihrgccmd2Z home]# docker attach e938a049e901 #进入容器
[root@e938a049e901 /]# cd /home/
[root@e938a049e901 home]# ls
[root@e938a049e901 home]# touch testbbb.java #在容器内创建文件
[root@e938a049e901 home]# exit
exit
[root@iZ2vc20ehn0q0ihrgccmd2Z home]# docker cp e938a049e901:/home/testbbb.java /home
[root@iZ2vc20ehn0q0ihrgccmd2Z home]# ls
testaaa.java testbbb.java www xuan xuanmeng
[root@iZ2vc20ehn0q0ihrgccmd2Z home]#
# 拷贝是一个手动过程 未来使用 -v 卷的技术 实现自动同步
作业1 nginx
docker search nginx
docker pull nginx
# -d 后台运行
# --name 命名
# -p 3344:80 宿主机端口:容器内部端口
[root@iZ2vc20ehn0q0ihrgccmd2Z home]# docker run -d --name nginx001 -p 3344:80 nginx
72ac7697aa7c7625f6848698b2321388ea4f6d4a90474b18bf1dc75a9a6b5e90
[root@iZ2vc20ehn0q0ihrgccmd2Z home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
72ac7697aa7c nginx "/docker-entrypoint.…" 14 seconds ago Up 13 seconds 0.0.0.0:3344->80/tcp nginx001
[root@iZ2vc20ehn0q0ihrgccmd2Z home]# curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
#进入容器
docker exec -it 容器ID
作业2 安装tomcat
# 官方使用
docker run -it --rm tomcat:9.0 # 下载测试完就删除
# 一般使用
docker pull tomcat
docker run -d -p 3355:8080 --name tomcat001 tomcat
#进入容器
docker run -d -p 3355:8080 --name tomcat001 tomcat
作业3 部署es + kibana
# es 暴露的端口很多
# es 十分耗内存
# es 数据一般需要放置到安全目录挂载
# --net somenetwork
# 下载启动es
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
# 启动后linux会非常卡 docker stats 查看
#修改配置文件
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAV_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
可视化
- portainer
- Rancher
commit镜像
docker commit 提交容器成为一个新的副本
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[tag]
实战测试
[root@iZ2vc20ehn0q0ihrgccmd2Z home]# docker commit -a="xm" -m="add something" b954c8badbcc tomcat-xm:1.0
sha256:9f3cb5e05184a065fc5bec51893380e9f9517bc33b90b71bdd5b0c767dd70d69
[root@iZ2vc20ehn0q0ihrgccmd2Z home]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat-xm 1.0 9f3cb5e05184 44 seconds ago 654MB