五 常见命令
5.1 基本命令
docker version # 查看docker版本
docker images # 查看所有已下载镜像,等价于:docker image ls 命令
docker container ls # 查看所有容器
docker ps #查看正在运行的容器
docker image prune # 清理临时的、没有被使用的镜像文件。-a, --all: 删除所有没有用的镜像,而不仅仅是临时文件;
5.2 拉取镜像
docker search mysql # 查看mysql相关镜像
docker pull mysql:5.7 # 拉取mysql镜像
docker image ls # 查看所有已下载镜像
5.3 删除镜像
比如我们要删除我们下载的 mysql 镜像。
通过 docker rmi [image]
(等价于docker image rm [image]
)删除镜像之前首先要确保这个镜像没有被容器引用(可以通过标签名称或者镜像 ID删除)。
通过我们前面讲的docker ps
命令即可查看。
➜ ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c4cd691d9f80 mysql:5.7 "docker-entrypoint.s…" 7 weeks ago Up 12 days 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
可以看到 mysql 正在被 id 为 c4cd691d9f80 的容器引用,我们需要首先通过 docker stop c4cd691d9f80
或者 docker stop mysql
暂停这个容器。
然后查看 mysql 镜像的 id
➜ ~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 f6509bac4980 3 months ago 373MB
通过 IMAGE ID 或者 REPOSITORY 名字即可删除
docker rmi f6509bac4980 # 或者 docker rmim mysql
Docker的常用命令
帮助命令
docker version #显示docker的版本信息
docker info #显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help #万能命令
docker version #显示docker的版本信息
docker info #显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help #万能命令
镜像命令
docker images
[root@Anzia ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 4 weeks ago 13.3kB
#解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
#可选项
-a, --all Show all images (default hides intermediate images)
--digests Show digests
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print images using a Go template
--no-trunc Don't truncate output
-q, --quiet Only show image IDs
docker images -a #列出所有镜像
docker images -q #只显示镜像的id
docker search 搜索镜像
[root@Anzia ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 10702 [OK]
#可选项,通过收藏来过滤
[root@Anzia ~]# docker search mysql --filter=stars=5000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 10702 [OK]
docker pull 下载镜像
#下载镜像 docker pull 镜像名[:tag]
[root@Anzia ~]# docker pull mysql
Using default tag: latest #如果不写tag,默认就是latest
latest: Pulling from library/mysql
a076a628af6f: Pull complete #分层下载,docker images的核心,联合文件系统
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
#指定版本地址
[root@Anzia ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
a076a628af6f: Already exists
f6c208f3f991: Already exists
88a9455a9165: Already exists
406c9b8427c6: Already exists
7c88599c0b25: Already exists
25b5c6debdaf: Already exists
43a5816f1617: Already exists
1831ac1245f4: Pull complete
37677b8c1f79: Pull complete
27e4ac3b0f6e: Pull complete
7227baa8c445: Pull complete
Digest: sha256:b3d1eff023f698cd433695c9506171f0d08a8f92a0c8063c1a4d9db9a55808df
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j2MEjVNY-1632744429037)(docker命令.assets/image-20210406082056007.png)]
docker rmi 删除镜像
docker rmi -f 镜像id #删除指定镜像
docker rmi -f 镜像id 镜像id 镜像id #删除多个镜像
docker rmi -f $(docker images -aq) #删除全部镜像
容器命令
说明:我们有了镜像才能创建容器,linux,下载一个centos镜像来测试学习
docker pull centos
docker run image新建容器并启动
docker run [可选参数] image
#参数说明
--name="Name" 容器名字 tomcat01 tomcat02 用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口 (常用)
-p 容器端口
-P 随机指定端口
#测试,启动并进入容器
[root@Anzia ~]# docker run -it centos /bin/bash
[root@c7da5d34f5eb /]# ls #查看容器内的centos,基础版本,很多命令都是不完善的
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
#从容器中退回到主机
[root@c7da5d34f5eb /]# exit
exit
docker run -d image后台启动容器
#命令 docker run -d 镜像名
[root@Anzia //]# docker run -d centos
#问题:docker ps 发现centos停止了
#常见的坑,docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
#nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有进程了
docker ps列出所有运行的容器
#docker ps 命令
#列出当前正在运行的容器
-a #列出当前正在运行的容器 + 带出历史运行过的容器
-n=? #显示最近创建的容器
-q #只显示容器的编号
[root@Anzia //]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@Anzia //]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c7da5d34f5eb centos "/bin/bash" 15 minutes ago Exited (0) 12 minutes ago adoring_gagarin
d9a74f16ff3d d1165f221234 "/hello" 10 hours ago Exited (0) 10 hours ago compassionate_golick
62d61b2250aa d1165f221234 "/hello" 11 days ago Exited (0) 11 days ago cool_keller
exit退出容器
exit #直接停止容器并退出
ctrl + p + q #容器不停止退出
rm删除容器
docker rm 容器id #删除指定容器,不能删除正在运行的容器,如果要强制删除 rm -f
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 log 查看日志
docker log -f -t --tail 容器,没有日志
#自己编写一段shell脚本
[root@Anzia //]# docker run -d centos /bin/sh -c "while true;do echo kuangshen;sleep 1;done"
[root@Anzia //]# docker ps
CONTAINER ID IMAGE
95d1a498a3b7 centos
#显示日志
-t #时间戳
-f #动态显示
--tail 数字 #要显示的日志条数
[root@Anzia //]# docker logs -f -t --tail 10 95d1a498a3b7
docker top 容器id查看容器中进程信息
#命令 docker top 容器id
[root@Anzia //]# docker top 95d1a498a3b7
UID PID PPID C STIME TTY TIME CMD
root 21077 21043 0 13:42 ? 00:00:00 /bin/sh -c while true;do echo kuangshen;sleep 1;done
root 21597 21077 0 13:49 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
docker inspect查看镜像的元数据
#命令 docker inspect 容器id
[root@Anzia //]# docker inspect 95d1a498a3b7
docker exec -it 容器id进入当前正在运行的容器
#我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
#命令
docker exec -it 容器id bashSell
#测试
[root@Anzia //]# docker exec -it 95d1a498a3b7 /bin/bash
[root@95d1a498a3b7 /]# ls
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
#方式二
docker attach 容器id
#测试
[root@Anzia ~]# docker attach 95d1a498a3b7 /bin/bash
# docker exec #进入容器后开启一个新的终端,可以在里面操作(常用)
# docker attach #进入容器正在执行的终端,不会启动新的进程
docker cp 从容器内拷贝文件到主机内
docker ps 容器id:容器内路径 目的主机路径
#查看当前主机目录下
[root@Anzia home]# touch kuangshen.java
[root@Anzia home]# ls
kuangshen.java
[root@Anzia home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4132744dd350 centos "/bin/bash" About a minute ago Up About a minute competent_shtern
#进入docker容器内部
[root@Anzia home]# docker attach 4132744dd350
[root@4132744dd350 /]# cd /home
#在容器内新建一个文件
[root@4132744dd350 home]# touch test.java
[root@4132744dd350 home]# ls
test.java
[root@4132744dd350 home]# exit
exit
[root@Anzia home]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4132744dd350 centos "/bin/bash" 3 minutes ago Exited (0) 6 seconds ago competent_shtern
#将这文件拷贝出来到这个主机上
[root@Anzia home]# docker cp 4132744dd350:/home/test.java /home
[root@Anzia home]# ls
kuangshen.java test.java
#拷贝是一个手动的过程,未来我们使用 -v 的技术,可以实现同步
小结
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IFBUtajR-1632744429038)(docker命令.assets/Rda128e7d249204ab348c12bd3cb89d43.png)]
attach Attach local standard input, output, and error streams to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes to files or directories on a container's filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container's filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on Docker objects
kill Kill one or more running containers
load Load an image from a tar archive or STDIN
login Log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart one or more containers
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save one or more images to a tar archive (streamed to STDOUT by default)
search Search the Docker Hub for images
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
version Show the Docker version information
wait Block until one or more containers stop, then print their exit codes
作业练习
Docker安装Nginx
#1. 搜索镜像 search 建议大家去docker hub搜索,可以看到帮助文档
#2. 下载镜像 pull
#3. 运行测试
[root@Anzia home]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest f6d0b4767a6c 2 months ago 133MB
centos latest 300e315adb2f 3 months ago 209MB
#-d 后台运行
#--name 给容器命名
#-p 宿主机端口,容器内部端口
[root@Anzia home]# docker run -d --name nginx01 -p:3344:80 nginx
9ebe86a481ff92e44f92a4cacadd322fd1ba931d89cb4fdaddd5809944cdef19
[root@Anzia home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9ebe86a481ff nginx "/docker-entrypoint.…" 8 seconds ago Up 7 seconds 0.0.0.0:3344->80/tcp nginx01
[root@Anzia home]# curl localhost:3344
#进入容器
[root@Anzia home]# docker exec -it nginx01 /bin/bash
root@9ebe86a481ff:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@9ebe86a481ff:/# cd /etc/nginx
root@9ebe86a481ff:/etc/nginx# ls
conf.d koi-utf mime.types nginx.conf uwsgi_params
fastcgi_params koi-win modules scgi_params win-utf
端口暴露的概念
思考问题:我们每次改动nginx配置文件,都需要进入容器内部?十分的麻烦,我要是在容器外部提供一个映射路径,达到在容器修改文件,容器内部就可以自动修改? -v 数据卷
docker来装一个tomcat
#官方的使用
docker run -it --rm tomcat:9.0
#我们之前的启动都是在后台,停止了容器之后,容器还是可以查到 docker run -it --rm 一般用来测试,用完删除
#下载再删除
[root@Anzia home]# docker pull tomcat:9.0
#启动运行
[root@Anzia home]# docker run -d -p 3355:8080 --name tomcat01 tomcat:9.0
#测试访问没有问题
#进入容器
[root@Anzia home]# docker run -d -p 9090:8080 --name tomcat01 tomcat:9.0
756d83b604dce9a60612be9d3c6036ccf88ab6c61d916cbd740b919d81c5155f
[root@Anzia home]# docker exec -it tomcat01 /bin/bash
#发现问题:1. linux命令少了 2. 没有webapps。阿里云镜像的原因,默认是最小的镜像,所有不必要的都剔除掉
#保证最小可运行环境
思考问题:我们以后要部署项目,如果每次都要进入容器是不是十分麻烦?我要是可以在容器外部提供一个映射路径,webapps,我们在外部放置项目,就自动同步到内部就好了
部署 es + kibana
#es 暴露的端口很多
#es 十分的耗内存
#es 的数据一般需要放置到安全目录挂载
# --net somenetwork ? 网络配置
#启动elasticsearch
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
#查看 docker stats
#测试 curl localhost:9200
#增加内存限制
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xms512m" elasticsearch:7.6.2
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9cOCii5F-1632744429040)(docker命令.assets/image-20210406162627692.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gX9AwPml-1632744429041)(docker命令.assets/image-20210406162721093.png)]
使用kibana连接es,思考网络如何才能连接过去
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dYUSUosg-1632744429041)(docker命令.assets/OIP-1617697904581.jfif)]
可视化
- portainer(先用这个)
docker run -d -p 8088:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
- Rancher(CI/CD再用)
什么是portainer?
Docker图形化界面管理!提供一个后台面板供我们操作
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3ONSX8QL-1632744429042)(docker命令.assets/image-20210406172844174.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eNliRxif-1632744429042)(docker命令.assets/image-20210406173037023.png)]
[外链图片转存中...(img-9cOCii5F-1632744429040)]
[外链图片转存中...(img-gX9AwPml-1632744429041)]
> 使用kibana连接es,思考网络如何才能连接过去
[外链图片转存中...(img-dYUSUosg-1632744429041)]
### 可视化
- portainer(先用这个)
~~~bash
docker run -d -p 8088:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
- Rancher(CI/CD再用)
什么是portainer?
Docker图形化界面管理!提供一个后台面板供我们操作
[外链图片转存中…(img-3ONSX8QL-1632744429042)]
[外链图片转存中…(img-eNliRxif-1632744429042)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X9KqDDtW-1632744429043)(docker命令.assets/image-20210406173046042.png)]