# Docker常用命令
# 帮助命令
docker version # 版本信息
docker info # 系统信息
docker 命令 --help
# 镜像命令
docker images 查看本地主机上的镜像
[root@VM-20-7-centos docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d2c94e258dcb 15 months ago 13.3kB
# 可选项
-a, --all # 列出所有镜像
-q, --quiet # 只显示镜像ID
docker search 搜索镜像
[root@VM-20-7-centos docker]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL
mysql MySQL is a widely used, open-source relation… 15301 [OK]
mariadb MariaDB Server is a high performing open sou… 5828 [OK]
phpmyadmin phpMyAdmin - A web interface for MySQL and M… 1017 [OK]
# 可选项,搜索收藏3000以上的镜像
--filter=STARS=3000
docker pull 下载镜像
# 下载镜像docker pull 镜像名[:tag]
[root@VM-20-7-centos docker]# docker pull mysql
Using default tag: latest # 如果不写tag,默认就是latest
latest: Pulling from library/mysql
d9a40b27c30f: Pull complete # 分层下载, docker image的核心 联合文件系统
fe4b01031aab: Pull complete
aa72c34c4347: Pull complete
473ade985fa2: Pull complete
cc168a9482de: Pull complete
3ca3786815dd: Pull complete
3e3fac98ea83: Pull complete
10e5505c3ae4: Pull complete
a79ade39aab9: Pull complete
ae34d51c6da2: Pull complete
Digest: sha256:d8df069848906979fd7511db00dc22efeb0a33a990d87c3c6d3fcdafd6fc6123 # 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实地址
# 等价命令
docker pull mysql
docker pull docker.io/library/mysql:latest
# 指定版本下载
docker pull mysql:8.0
docker rmi 删除镜像
[root@VM-20-7-centos docker]# docker rmi -f 容器ID # 删除指定容器
[root@VM-20-7-centos docker]# docker rmi -f 容器ID 容器ID 容器ID # 删除指定容器
[root@VM-20-7-centos ~]# docker rmi -f $(docker images -aq) # 删除所有命令,拿到所有的ID,再用ID去删除
# 容器命令
Docker 容器是镜像的运行实例,首先需要下载一个镜像
docker pull centos
新建容器并启动
每一个启动过的容器都有伊恩containerid
,包括历史启动过的
docker run [可选参数] image
# 参数说明
--name="Name" 容器名字 centos1 centos2 ,用于区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口
-p 容器端口
容器端口
-P 随机指定端口
# 测试,启动并进入容器
[root@VM-20-7-centos ~]# docker run -it centos /bin/bash
[root@37014cca6e59 /]#ls
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
# 从容器退出到主机
[root@37014cca6e59 /]# exit
exit
[root@VM-20-7-centos /]# ls
bin data etc lib lost+found mnt proc run srv tmp var
boot dev home lib64 media opt root sbin sys usr
查看运行中的容器
# docker ps 命令
# 显示最近运行的容器
-a # 显示最近运行的容器+历史运行的容器
-n=? # 显示最近创建的容器
-q # 只显示容器的编号CONTAINER ID
[root@VM-20-7-centos /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@VM-20-7-centos /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
37014cca6e59 centos "/bin/bash" 5 minutes ago Exited (130) 2 minutes ago condescending_dewdney
7e27229c38ce d2c94e258dcb "/hello" 13 hours ago Exited (0) 13 hours ago peaceful_mcnulty
退出容器
exit # 容器停止退出
ctrl + p + q # 容器不停止退出
[root@VM-20-7-centos /]# docker run -it centos /bin/bash
[root@3a87ddaae533 /]# [root@VM-20-7-centos /]#
[root@VM-20-7-centos /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3a87ddaae533 centos "/bin/bash" 47 seconds ago Up 47 seconds great_dubinsky
[root@VM-20-7-centos /]#
删除容器
docker rm 容器id # 删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -rf
docker rm -f $(docker ps -aq) # 删除所有的容器
docker ps -a -q|xargs docker rm # 删除所有的容器
启动和停止容器的操作
docker start 容器ID # 启动容器
docker stop 容器ID # 关闭容器
docker restart 容器ID # 重启容器
docker kill 容器ID # 强制停止容器
# 常用其他命令
后台启动
# docker run -d 镜像名
[root@VM-20-7-centos /]# docker run -d centos
# 问题 docker ps 发现centos 停止了
# 常见的坑 docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有前台应用,就会自动停止
查看日志
docker logs [参数]
-f # 持续输出新生成的日志
-t # 显示时间戳
--tail number # 显示日志的最后几行
# 测试
[root@VM-20-7-centos /]# docker run -d centos /bin/bash -c "while true;do echo rong;sleep 1;done"
6ab070632a3786f8d15d93ace21e2bb53775ef60f6ddb72f86371962853ec2b1
[root@VM-20-7-centos /]# docker logs -tf --tail 10 6ab07
2024-08-18T04:17:29.377142371Z rong
2024-08-18T04:17:30.378593786Z rong
2024-08-18T04:17:31.380054880Z rong
2024-08-18T04:17:32.381486168Z rong
2024-08-18T04:17:33.383041959Z rong
2024-08-18T04:17:34.384493754Z rong
2024-08-18T04:17:35.385956572Z rong
2024-08-18T04:17:36.387386266Z rong
查看容器的进程信息
# docker top 容器id
[root@VM-20-7-centos /]# docker top 6ab070632a37
UID PID PPID C STIME
root 16728 16707 0 12:17
root 18362 16728 0 12:21
查看镜像的元数据
# 命令
docker inspect 容器id
# 测试
[root@VM-20-7-centos /]# docker inspect 6ab070632a37
进入当前正在运行的容器
# 命令
docker exec -it 容器ID /bin/bash # 进入容器,并开启一个新的控制台
# 测试
[root@VM-20-7-centos /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6ab070632a37 centos "/bin/bash -c 'while…" 13 minutes ago Up 12 minutes hopeful_colden
[root@VM-20-7-centos /]# docker exec -it 6ab070632a37 /bin/bash
[root@6ab070632a37 /]# ls
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
[root@6ab070632a37 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 04:17 ? 00:00:00 /bin/bash -c while true;do echo rong;sleep 1;done
root 905 0 0 04:32 pts/0 00:00:00 /bin/bash
root 926 1 0 04:32 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /us
root 927 905 0 04:32 pts/0 00:00:00 ps -ef
# 方式2
docker attach 容器ID # 进入容器正在运行的控制台
从主机拷贝文件到容器上
只要容器在,数据就在,和容器运行没运行无关
docker
[root@VM-20-7-centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@VM-20-7-centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d2c94e258dcb 15 months ago 13.3kB
centos latest 5d0da3dc9764 2 years ago 231MB
[root@VM-20-7-centos ~]# docker run -it centos /bin/bash
[root@86db2950731e /]# [root@VM-20-7-centos ~]#
[root@VM-20-7-centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
86db2950731e centos "/bin/bash" 22 seconds ago Up 21 seconds nifty_matsumoto
# 进入容器内部
[root@VM-20-7-centos home]# docker attach 86db2950731e
[root@86db2950731e /]# cd /home
[root@86db2950731e home]# ls
# 容器内新建一个文件
[root@86db2950731e home]# touch test.java
[root@86db2950731e home]# ls
test.java
[root@86db2950731e home]# exit
exit
# 将文件拷贝出来到主机上
[root@VM-20-7-centos home]# docker cp 86db2950731e:/home/test.java /home
Successfully copied 1.54kB to /home
[root@VM-20-7-centos home]# ls
lighthouse rong.java test.java
# 目前是手动拷贝,后面可以通过容器卷自动拷贝
# 小结
attach Attach to a running container # 当前 shell 下 attach 连接指定运行镜像
build Build an image from a Dockerfile # 通过 Dockerfile 定制镜像
commit Create a new image from a container changes # 提交当前容器为新的镜像
cp Copy files/folders from the containers filesystem to the host path #从容器中拷贝指定文件或者目录到宿主机中
create Create a new container # 创建一个新的容器,同run,但不启动容器
diff Inspect changes on a container's filesystem # 查看 docker 容器变化
events Get real time events from the server # 从 docker 服务获取容器实时事件
exec Run a command in an existing container # 在已存在的容器上运行命令
export Stream the contents of a container as a tar archive # 导出容器的内容流作为一个 tar 归档文件[对应import ]
history Show the history of an image # 展示一个镜像形成历史
images List images # 列出系统当前镜像
import Create a new filesystem image from the contents of a tarball # 从 tar包中的内容创建一个新的文件系统映[对应export]
info Display system-wide information # 显示系统相关信息
inspect Return low-level information on a container # 查看容器详细信息
kill Kill a running container # kill 指定 docker 容器
load Load an image from a tar archive # 从一个 tar 包中加载一个镜像[对应save]
login Register or Login to the docker registry server # 注册或者登陆一个 docker 源服务器
logout Log out from a Docker registry server # 从当前 Docker registry 退出
logs Fetch the logs of a container # 输出当前容器日志信息
port Lookup the public-facing port which is NAT-ed to PRIVATE_PORT # 查看映射端口对应的容器内部源端口
pause Pause all processes within a container # 暂停容器
ps List containers # 列出容器列表
pull Pull an image or a repository from the docker registry server # 从docker镜像源服务器拉取指定镜像或者库镜像
push Push an image or a repository to the docker registry server # 推送指定镜像或者库镜像至docker源服务器
restart Restart a running container # 重启运行的容器
rm Remove one or more containers # 移除一个或者多个容器
rmi Remove one or more images # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]
run Run a command in a new container # 创建一个新的容器并运行 一个命令
save Save an image to a tar archive # 保存一个镜像为一个 tar 包[对应load]
search Search for an image on the Docker Hub # 在 docker hub 中搜索镜像
start Start a stopped containers # 启动容器
stop Stop a running containers # 停止容器
tag Tag an image into a repository # 给源中镜像打标签
top Lookup the running processes of a container # 查看容器中运行的进程信 息
unpause Unpause a paused container # 取消暂停容器
version Show the docker version information # 查看 docker 版本号
wait Block until a container stops, then print its exit code # 截取容器停止时的退出状态值
# 案例
- 部署nginx
# 1、搜索镜像
# 2、下载镜像
# 3、运行测试
[root@VM-20-7-centos home]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.27.1 5ef79149e0ec 3 days ago 188MB
# -d 后台运行
# --name 给容器命名
# -p 宿主机端口:容器内部端口
[root@VM-20-7-centos home]# docker run -d --name nginx01 -p 4396:80 nginx:1.27.1
46905d813f506080ed4b3c655b7750a3e03a31ea871d429ea3dcb8d9bbfe173c
[root@VM-20-7-centos home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
46905d813f50 nginx:1.27.1 "/docker-entrypoint.…" 5 seconds ago Up 4 seconds 0.0.0.0:4396->80/tcp, :::4396->80/tcp nginx01
# 测试访问
[root@VM-20-7-centos home]# curl localhost:4396
# 进入容器
[root@VM-20-7-centos home]# docker exec -it nginx01 /bin/bash
root@46905d813f50:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@46905d813f50:/# cd /etc/nginx
root@46905d813f50:/etc/nginx# ls
conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params
思考:每次修改nginx配置文件,都需要进入容器内部,十分麻烦!要是可以在容器外部提供一个映射路径,实现在容器外修改文件,容器内部就可以自动修改? -v 数据卷!
- 部署tomcat
# 官方推荐 --rm 用完即删 ,适用于测试
docker run -it --rm tomcat:9.0
# 下载
docker pull tomcat:9.0
# 启动运行
docker run -d -p 4396:8080 --name tomcat01 tomcat:9.0
# 测试访问没有问题
# 进入容器
[root@VM-20-7-centos home]# docker exec -it tomcat01 /bin/bash
# 发现问题:1、linux命令少了 2、没有webapps。 腾讯云镜像默认是最小镜像,所有不必要内容都被剔除
# 把webapps.dist下内容复制到webapps
cp -f webapps.dist/* webapps
思考问题:部署项目每次都要进入容器十分麻烦,要是可以在容器外部提供一个映射路径,webapps,在外部防止项目,自动同步到内部就好了
- 部署es+kibana
kibana 是es的数据可视化和分析平台
# es暴露的端口很多
# 十分耗内存
# es的数据一般需要放置到安全目录
[root@VM-20-7-centos home]# docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:8.15.0
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:8.15.0
# 启动后就卡住了 docker stats 查看cpu状态
[root@VM-20-7-centos home]# docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
818931fbf758 elasticsearch 1.21% 1.431GiB / 1.952GiB 73.31% 656B / 0B 429MB / 2.29MB 83
# 添加内存限制
[root@VM-20-7-centos home]# docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:8.15.0
# 再次查看内存使用情况
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
31bd8b696851 elasticsearch 0.99% 635MiB / 1.952GiB 31.77% 656B / 0B 184MB / 2.16MB 83
# 测试会访问失败
# 进入容器 发现jdk版本不对
[root@VM-20-7-centos home]# docker exec -it elasticsearch /bin/bash
elasticsearch@b8e6b669d669:~$ java -version
bash: java: command not found
# 安装低版本es并启动、7.17.23
[root@VM-20-7-centos home]# docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.17.23
# 测试成功
[root@VM-20-7-centos home]# curl localhost:9200
{
"name" : "608f46e4da8c",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "bkVPEQmPRGerhpM-uwWaFA",
"version" : {
"number" : "7.17.23",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "61d76462eecaf09ada684d1b5d319b5ff6865a83",
"build_date" : "2024-07-25T14:37:42.448799567Z",
"build_snapshot" : false,
"lucene_version" : "8.11.3",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
思考:查看容器运行状态、添加限制
# 可视化
什么Portainer?
Docker图形化界面管理工具!很香很好用
- Portainer(先用这个)
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
# 测试访问
http://server-ip:8088/
# 首次登录需要设置密码
管理界面
- Rancher(CI/CD 再用)
#安装rancher-server
docker run --name rancher-server -p 8000:8080 -v
/etc/localtime:/etc/localtime:ro -d rancher/server
#安装agent
docker run --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v
/var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.11
http://39.101.191.131:8000/v1/scripts/D3DBD43F263109BB881F:1577750400000:7M0y
BzCw4XSxJklD7TpysYIpI