记录生活中的点点滴滴

0%

Docker学习2:常用命令

Docker学习第二篇:Docker常用命令!

Docker常用命令

帮助命令

1
2
3
docker version   # 显示docker的版本信息
docker info # 显示docker的详细信息
docker 命令 --help #万能命令,查看命令相关信息

镜像命令

docker images 查看本地主机上的所有镜像

1
2
3
4
5
6
7
8
9
# 解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
# 可选项
-a,--all # 列出所有的镜像
-q,--queit # 只显示镜像的id

docker search 搜索镜像

docker pull 下载镜像

1
2
# 拉取最新的mysql下载 后面也可跟上版本号 [:tag]
docker pull mysql

docker rmi 删除镜像

1
2
3
docker rmi -f 容器id # 删除指定的容器
docker rmi -f 容器id 容器id 容器id # 删除多个容器
docker rmi -f $(docker images -aq) #删除全部的容器

容器命令

我们有了镜像才可以创建容器。

我们接下来下载一个centos镜像:

1
docker pull centos
新建容器并启动
1
2
3
4
5
6
7
8
9
10
11
docker run [可选参数] image
# 参数说明
-name="xxxx" 容器名字,同来区分容器
-d 后台方式运行
-i 交互模式使用 配合-t
-t 分配一个伪终端 redis\mysql等
-p 端口映射 外:内
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
-P 随机指定端口

测试,启动并进入容器:

1
2
3
4
[root@localhost ~]# docker run -it centos /bin/bash
[root@1ff8ce7cb3ec /]# ls # 查看容器内的centos,基础版本,很多命令都是不完善的
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@1ff8ce7cb3ec /]#
列出所有运行的容器
1
2
3
docker ps # 列出当前运行的容器
docker ps -a # 列出所有运行的容器
docker ps -aq # 列出所有运行的容器id
退出容器
1
2
exit # 直接容器停止并退出
ctrl + P + Q # 容器不停止退出
删除容器
1
2
docker rm 容器id  # 删除指定容器,不能删除正在运行的容器,若要强制删除,加-f
docker rm -f $(docker ps -aq) # 删除所有容器
启动和停止容器的操作
1
2
3
4
docker start 容器id  # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止当前正在运行的容器
docker kill 容器id # 强制停止当前容器

常用的其他容器

后台启动容器
1
2
3
4
5
6
7
# docker run -d 镜像名
[root@localhost ~]# docker run -d centos
b399f94d696206dff1ea0af09ab9bab80faa1950b1a85b822ea7aae45370a5bc
# ps之后可以看到却没有对应容器
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost ~]#

这是常见的坑,容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止。

查看日志
1
2
3
# docker logs 
[root@localhost ~]# docker logs -ft b399f94d6962
[root@localhost ~]#
查看进程
1
2
3
[root@localhost ~]# docker top 6b671d707272
UID PID PPID C STIME TTY TIME CMD
root 10355 10335 0 19:41 pts/0 00:00:00 /bin/bash
查看镜像的元数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@localhost ~]# docker inspect 6b671d707272
[
{
"Id": "6b671d70727235e99ad9496b062dbac17e1bf3bd09bb8360e2d517e7bd574bd8",
"Created": "2021-01-15T11:41:42.457276571Z",
"Path": "/bin/bash",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 10355,
"ExitCode": 0,
"Error": "",
"StartedAt": "2021-01-15T11:41:42.751325327Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55",
......
}
]
进入当前运行的容器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 我们通常容器都是在后台方式运行的,需要进入容器,需要进入容器,修改一些配置
# 命令
docker exec -it 容器id bashShell

[root@localhost ~]# docker exec -it 6b671d707272 /bin/bash
[root@6b671d707272 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@6b671d707272 /]#


# 方式二
docker attach 容器id

[root@localhost ~]# docker attach 6b671d707272
[root@6b671d707272 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@6b671d707272 /]# read escape sequence
[root@localhost ~]#


# docker exec # 进入容器开启一个新的终端,可以在里面操作(常用)
# docker attach # 进入容器正在执行的终端,不回启动新的进程!
从容器里拷贝文件到主机
1
2
3
4
5
6
7
8
9
10
docker cp 容器id:容器内路径 目的主机路径

# 测试,把容器里的gs.txt拷贝到主机root目录下
[root@localhost ~]# docker cp 6b671d707272:/gs.txt /root/
[root@localhost ~]# ls
anaconda-ks.cfg download gs.txt
[root@localhost ~]#


# 这是一个手动的过程,未来我们可以使用 -v 卷的技术,可以实现

练习

下面我们用docker部署一下 nginx 和 tomcat ,对上面学习的命令进行巩固。

部署nginx

1
2
3
4
5
# 1.先拉取nginx镜像
docker pull nginx

# 2.后台运行nginx,本机的8080端口进行映射
docker run -d -p 8080:80 --name nginx01 nginx

确保防火墙什么的都是关的,去浏览器进行访问:

部署tomcat

1
2
# 一步到位,直接run,它自己会自动下载
docker run -d -p 8080:8080 --name tomcat01 tomcat:9.0

访问如下:

为什么会这样?说明我们的tomcat部署是没有问题的,但是webapps目录下因为没有对应的项目文件,所以出现404,想要解决这种问题,我们应该手动在webapps目录下添加项目文件,如下操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
49e28516cfd1 tomcat:9.0 "catalina.sh run" About a minute ago Up About a minute 0.0.0.0:8080->8080/tcp tomcat01
# 进入容器
[root@localhost ~]# docker exec -it 49e28516cfd1 /bin/bash
root@49e28516cfd1:/usr/local/tomcat# ls
BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist
CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work
# 复制项目文件到webapps目录下
root@49e28516cfd1:/usr/local/tomcat# cp -r webapps.dist/* webapps/
root@49e28516cfd1:/usr/local/tomcat# cd webapps/
root@49e28516cfd1:/usr/local/tomcat/webapps# ls
ROOT docs examples host-manager manager
root@49e28516cfd1:/usr/local/tomcat/webapps#

这样再次访问,就可以看到tom猫了: