文章目录
Docker学习笔记(二)
1.Docker的常用命令
1.1帮助命令
docker version # 显示docker的版本信息
docker info # 显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help # 帮助命令
1.2镜像命令
1.2.1docker images
docker images
查看所有本地的主机上的镜像
#解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
#命令参数可选项
-a, --all # 显示所有镜像 (docker images -a)
-q, --quiet # 仅显示镜像id (docker images -q)
1.2.2docker search
docker search
搜索镜像
1.2.3docker pull
docker pull
下载镜像
# 下载镜像:docker pull 镜像名[:tag]
[root@jiang ~]# docker pull mysql
Using default tag: latest # 如果不写tag,默认就是latest,最新的版本
72a69066d2fe: Pull complete # 分层下载,docker image的核心,联合文件下载
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
.....
# 两个命令是等价的
docker pull mysql
docker pull docker.io/library/mysql:latest
# 指定版本下载
[root@jiang ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
72a69066d2fe: Already exists # 联合文件下载,已经存在的资源可以共用
93619dbc5b36: Already exists
0ceb82207cd7: Pull complete
37f2405cae96: Pull complete
e2482e017e53: Pull complete
70deed891d42: Pull complete
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
1.2.4docker rmi
docker rmi
删除镜像
[root@jiang ~]# docker rmi -f 镜像id # 删除指定的镜像
[root@jiang ~]# docker rmi -f 镜像id 镜像id 镜像id # 删除多个镜像(空格分隔)
[root@jiang ~]# docker rmi -f $(docker images -aq) # 删除全部的镜像
1.3容器命令
1.3.1新建容器并启动
说明:我们有了镜像才可以创建容器,linux,下载一个centos 镜像来测试学习。
docker pull centos
docker run [可选参数] image
# 参数说明
--name="name" 容器名字:用来区分容器
-d 后台方式运行:相当于nohup
-it 使用交互式运行:进入容器查看内容
-p 指定容器的端口(四种方式)小写字母p
-p ip:主机端口:容器端口
-p 主机端口:容器端口
-p 容器端口
容器端口
-P 随机指定端口(大写字母P)
测试:启动并进入容器
[root@jiang ~]# docker run -it centos
[root@59b0cea58f66 /]# ls # 查看容器内的centos(基础版本,很多命令都是不完善的)
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
# 从容器中退回到主机
[root@59b0cea58f66 /]# exit
exit
[root@jiang ~]#
1.3.2列出所有运行的容器
docker ps # 列出当前正在运行的容器
# 命令参数可选项
-a # 列出当前正在运行的容器+历史运行过的容器
-n=? # 显示最近创建的容器(可以指定显示几条,比如-n=1)
-q # 只显示容器的编号
1.3.3退出容器
exit # 容器直接停止,并退出
ctrl+P+Q # 容器不停止,退出
1.3.4删除容器
docker rm 容器id # 删除容器(不能删除正在运行的容器)如果要强制删除:docker rm -f 容器id
docker rm -f $(docker ps -aq) # 删除全部容器
docker ps -a -q|xargs docker rm # 删除所有容器
1.3.5启动和停止容器的操作
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止当前正在运行的容器
docker kill 容器id # 强制停止当前容器
1.4常用其他命令
1.4.1后台启动容器
# 命令docker run -d 镜像名
[root@jiang ~]# docker run -d centos
# 问题:docker ps发现centos停止了
# 常见的坑:docker容器使用后台运行,就必须要有要一个前台进程,docker发现没有应用,就会自动停止。
# 比如:nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
解释:首先,docker run -it centos 的意思是,为centos这个镜像创建一个容器, -i和-t这两个参数的作用是,为该docker创建一个伪终端,这样就可以进入到容器的交互模式?(也就是直接进入到容器里面)后面的/bin/bash的作用是表示载入容器后运行bash ,docker中必须要保持一个进程的运行,要不然整个容器启动后就会马上kill itself,这样当你使用docker ps 查看启动的容器时,就会发现你刚刚创建的那个容器并不在已启动的容器队列中。这个/bin/bash就表示启动容器后启动bash。
1.4.2查看日志
docker logs -tf --tail 容器id
1.4.3查看容器中进程的信息
docker top 容器id
1.4.4查看镜像的元数据
docker inspect 容器id
1.4.5进入当前正在运行的容器
# 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
# 命令
docker exec -it 容器id /bin/bash
# docker exec # 进入容器后开启一个新的终端,可以再里面操作(常用)
# docker attach # 进入容器正在执行的终端,不会启动新的进程。
1.4.6从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目的主机的路径
[root@cf9843583a2a /]# cd /home
[root@cf9843583a2a home]# pwd
/home
[root@cf9843583a2a home]# touch test.java
[root@cf9843583a2a home]# exit
exit
[root@jiang ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@jiang ~]# docker run -it centos /bin/bash
[root@1ff2d34d77eb /]# [root@jiang ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1ff2d34d77eb centos "/bin/bash" 25 seconds ago Up 24 seconds romantic_wiles
[root@jiang ~]# docker cp 1ff2d34d77eb:/home/test.java /home
Error: No such container:path: 1ff2d34d77eb:/home/test.java
[root@jiang ~]# docker attach 1ff2d34d77eb
[root@1ff2d34d77eb /]# pwd
/
[root@1ff2d34d77eb /]# cd /home
[root@1ff2d34d77eb home]# ls
[root@1ff2d34d77eb home]# ls
[root@1ff2d34d77eb home]# touch test.java
[root@1ff2d34d77eb home]# ls
test.java
[root@1ff2d34d77eb home]# read escape sequence
[root@jiang ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1ff2d34d77eb centos "/bin/bash" 2 minutes ago Up 2 minutes romantic_wiles
[root@jiang ~]# docker cp 1ff2d34d77eb:/home/test.java /home
[root@jiang ~]# cd /home
[root@jiang home]# ls
abc.txt hello.txt myhome.zip pig test.sh user_4 zwj
apple.txt jack my.sh sa tom user_5
ba jerry MyTest.class tag tomcat.sh v.sh
equal.sh jiaoben.sh MyTest.java tang user_1 wu
fox mac oper.sh temp user_2 xh
hello.sh mycal orange.txt test.java user_3 xq
[root@jiang home]#