Docker基础命令
一、Docker命令
docker 命令 --help,可以帮助你查看命令参数,当然在有网的前提下,建议百度搜索一下更快
docker version #显示版本信息
docker info #显示docker的系统信息, 包括镜像和容器信息
docker 命令 --help #万能命令
二、镜像命令
2.1 查看镜像
#查看镜像 docker images
[root@izuf67znusfv5r0k1fzac9z ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 6 months ago 13.3kB
#解释:
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
#可选项:
-a, --all 列出所有的镜像
-q, --quiet 只显示镜像的ID
2.2 搜索镜像
#搜索镜像 docker search
[root@izuf67znusfv5r0k1fzac9z ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 9750 [OK]
mariadb MariaDB is a community-developed fork of MyS… 3560 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 714 [OK]
#可选项
-f, --filter 筛选
#通过stars数筛选镜像
[root@izuf67znusfv5r0k1fzac9z ~]# docker search mysql -f=stars=3000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 9750 [OK]
mariadb MariaDB is a community-developed fork of MyS… 3560 [OK]
2.3 下载镜像
#下载镜像 docker pull 镜像名[:tag]
[root@izuf67znusfv5r0k1fzac9z ~]# docker pull mysql
Using default tag: latest #不指定tag 默认下载最新版
latest: Pulling from library/mysql #分层下载, docker images的核心, 联合文件系统
8559a31e96f4: Pull complete
d51ce1c2e575: Pull complete
c2344adc4858: Pull complete
fcf3ceff18fc: Pull complete
16da0c38dc5b: Pull complete
b905d1797e97: Pull complete
4b50d1c6b05c: Pull complete
571e8a282156: Pull complete
e7cc823c6090: Pull complete
61161ba7d2fc: Pull complete
74f29f825aaf: Pull complete
d29992fd199f: Pull complete
Digest: sha256:fe0a5b418ecf9b450d0e59062312b488d4d4ea98fc81427e3704f85154ee859c #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真实地址
#等价于
docker pull mysql
docker pull docker.io/library/mysql:latest
#指定下载版本
[root@izuf67znusfv5r0k1fzac9z ~]# docker pull mysql:5.7
2.4 删除镜像
docker rmi -f 镜像ID #删除指定的镜像
docker rmi -f 镜像ID 镜像ID …… #删除多个镜像
docker rmi -f $(docker images -aq) #删除全部镜像
三、容器命令
docker pull centos
下载centos 镜像,有了镜像才能创建容器。
3.1 新建容器并启动
docker run [可选参数] image #通过镜像创建容器,加上参数可以直接启动
#参数说明
--name="name" 表示容器名字 tomcat01 tomcat02,用来区分容器
-d 表示后台运行方式
-it 表示使用交互方式运行,进入容器查看内容
-p 表示指定容器端口8080,或者3333:8080,就是将主机的3333端口映射到容器的8080端口,这种方式比较常用
--privileged=true 使用该参数,container内的root拥有真正的root权限。
否则,container内的root只是外部的一个普通用户权限。
-p
还有很多其它用法,比如:
-p 127.0.0.1:3333:8080 表示使用特定ip去映射
-p 127.0.0.1::8080 表示任意端口映射
-p 127.0.0.1:3333:8080/udp 表示指定UDP协议
-P 注意这个P是大写,表示任意49000~49900端口去映射镜像暴露出来的端口
#启动,并进去容器(注意:当进去到容器的centos时,user已经成了root@ac1a40f4cf6b )
[root@izuf67znusfv5r0k1fzac9z ~]# docker run -it centos /bin/bash
[root@ac1a40f4cf6b /]#
[root@ac1a40f4cf6b /]# ls #查看容器中的centos文件,基础版本,很多命令都没有
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
#退出容器
[root@ac1a40f4cf6b /]# exit
exit
3.2 查询容器
docker ps [可选参数] #列出正在运行的容器
参数说明
-a #列出正在运行的容器+历史运行过的容器
-n=? #显示最近创建的容器
-q #只显示容器的ID
[root@izuf67znusfv5r0k1fzac9z ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
e832d1de3cc3 centos "/bin/bash" 54 seconds ago Up 53 seconds
[root@izuf67znusfv5r0k1fzac9z ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS
e832d1de3cc3 centos "/bin/bash" 58 seconds ago Up 58 seconds
ac1a40f4cf6b centos "/bin/bash" 6 minutes ago Exited (130) 2 minutes ago
11680679faf7 bf756fb1ae65 "/hello" 2 days ago Exited (0) 2 days ago
3.3 停止、启动容器
docker stop
停止容器
#先利用docker ps -a查看所有容器ID
docker ps -a
#再使用docker stop 容器ID,停止对应的容器
docker stop 容器ID
docker start
启动容器
docker restart
重启容器
docker kill
强制停止正在运行的容器
原理一样停止一样
Ctrl + P + Q
退出当前容器,保持后台运行
3.4 删除容器
docker rm 容器ID #删除指定容器,不能删除正在运行的容器,加上rm -f 可以强制删除
docker rm 容器ID 容器ID #删除多个容器
docker rm -f $(docker ps -aq) #删除所有容器
docker -a -q|xargs docker rm #通过Linux命令删除所有的容器
四、其他常用命令
4.1 后台启动容器
#命令docker run -d 镜像名
[root@izuf67znusfv5r0k1fzac9z ~]# docker run -d centos
#问题
docker ps 之后发现centos 停止了,所以一般使用交互模式启动,及加上-it,所以完整命令应该是
[root@izuf67znusfv5r0k1fzac9z ~]# docker run -d -it centos
#常见的坑:
docker 容器使用后台运行,就必须要有一个前台进程,docker 发现没有应用,就会自动停止
nginx 容器启动后,发现自己没有提供服务,就会立即停止,就是没有程序了
4.2 查看日志
docker logs -f -t --tail 容器ID
可以在宿主机中查看容器日志
#一般刚启动的容器没有日志,可以写一段shell脚本,-c表示bin/sh里添加内容
docker run -d centos /bin/sh -c "while true;do echo wangzhen;sleep 1;done"
#显示日志
-tf #显示所有日志
--tail number #显示对应行数的日志
[root@izuf67znusfv5r0k1fzac9z ~]# docker logs -f -t --tail 10 2eb8e89b4875
[root@izuf67znusfv5r0k1fzac9z ~]# docker logs -tf --tail 10 2eb8e89b4875
4.3 查看容器进程
docker top 容器ID
可以在宿主机中查看容器进程
[root@izuf67znusfv5r0k1fzac9z ~]# docker top 2eb8e89b4875
UID PID PPID C STIME TTY TIME CMD
root 9900 9873 0 22:28 ? 00:00:00 /bin/sh -c while true;do echo wangzhen;sleep 1;done
root 10471 9900 0 22:35
4.4 查看容器详细信息
docker inspect 2eb8e89b4875
查看容器的详细信息,几乎你能想到的信息都在这里
#如容器基础信息
"Id": "2eb8e89b487528b9698b55da97f8835b478470c72a950ba399c98a55bd79fab2",
"Created": "2020-07-21T14:28:22.097965152Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true;do echo wangzhen;sleep 1;done"
],
#网络信息
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "38f93e8890127ed2bebfb3ef62922900fb9b859897d84f0c5c5a7dc63a5f97d8",
"EndpointID": "c34954d5ef1f73536f670602c97da5a4f8bc8ae964569966b2b6a4cbecfba119",
"Gateway": "172.18.0.1",
"IPAddress": "172.18.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:12:00:03",
"DriverOpts": null
}
}
4.5 进入运行中的容器
-
方式一
docker exec -it 容器ID bashshell
#我们通常容器都是使用后台方式运行的,比如需要进入容器,修改配置 [root@izuf67znusfv5r0k1fzac9z ~]# docker exec -it aee315ba83da /bin/bash [root@aee315ba83da /]#
-
方式二
docker attach 容器ID
[root@izuf67znusfv5r0k1fzac9z ~]# docker attach aee315ba83da 正在执行的进程。。。
区别:
docker exec #进入容器后开启一个新的终端,可以在里面操作(常用)
docker attach #进入容器正在执行的终端,退出之前在输出,再次进入依旧是这个页面,不会启动新的进程
4.6 拷贝文件
docker cp 容器ID:容器内路径 主机目的路径
容器到宿主机
[root@izuf67znusfv5r0k1fzac9z java]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS
aee315ba83da centos "/bin/bash" 23 hours ago Exited (0) 12 seconds
#拷贝文件
[root@izuf67znusfv5r0k1fzac9z java]# docker cp aee315ba83da:/home/test.java /home/java
[root@izuf67znusfv5r0k1fzac9z java]# ls
test.java
#当前这个命令是手动的,未来,将使用 -V 卷的技术,可以实现自动同步
docker cp 本地路径 容器id:容器的路径
宿主机到容器
#拷贝文件
[root@izuf67znusfv5r0k1fzac9z java]# docker cp /home/java aee315ba83da:/home/test.java
[root@izuf67znusfv5r0k1fzac9z java]# ls
test.java
五、总结
上面所用到了都是常用命令,其他命令还有很多,后面也会慢慢学到,先用一张图概括一下