学习资料:
Docker镜像与容器
#下载一个centos镜像来测试
docker pull centos
#新建容器并启动
docker run [可选参数] image
#参数说明
--name="Name" 容器名字,tomcat01 tomcat02,用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口 (常用)
-p 容器端口
-P 随机指定端口
#测试,启动并进入容器
[hongsen@SEN /]docker run -it centos /bin/bash
[root@c20a1e457220 /]# ls #查看容器内的centos,基础版本,很多命令都是不完善的
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@c20a1e457220 /]# exit #从容器退回主机
exit
列出所有的运行的容器
docker ps # 列出当前运行的容器
-a 列出当前正在运行的容器+曾经运行过的容器,包括未运行的(例如异常退出(Exited)状态的容器)
-n=? 显示最近创建的容器
-q 只显示容器的编号
退出容器
exit 直接容器停止并退出
crtl+P+Q 容器不停止但退出
删除容器
docker rm 容器id 删除指定的容器(不能删除正在运行的容器)
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 run -d 镜像名
$docker run -d centos
# 问题 docker ps,发现centos 停止了
# 常见的坑:docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
# nginx, 容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
查看日志
docker logs -f -t --tail 数字 容器
$docker run -d centos /bin/sh -c "while true;do echo aaa;sleep 1;done"
$docker ps
# 显示日志
-tf 显示日志
--tail 数字 要显示的日志条数
$docker logs -tf --tail 10 容器id
查看容器中进程信息
docker top 容器id
查看镜像的元数据
docker inspect 容器id
进入当前正在运行的容器
# 通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
# 方式一
docker exec -it 容器id bashShell
# 测试
$docker exec -it 20bca89f485b /bin/bash
[root@20bca89f485b /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@20bca89f485b /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 14:37 pts/0 00:00:00 /bin/bash
root 16 0 0 14:58 pts/1 00:00:00 /bin/bash
root 31 16 0 14:58 pts/1 00:00:00 ps -ef
# 方式二
docker attach 容器id (如果当前容器有命令正常运行,可以看到正在运行的命令,而不是开启一个窗口)
# 测试
$docker attach 20bca89f485b
[root@20bca89f485b /]#
# 比较
docker exec 进入容器后开启一个新的终端,可以在里面操作(常用)
docker attach 进入容器正在执行的终端,不会启动新的进程
从容器内拷贝文件到主机
docker cp 容器id:容器内路径 目的主机路径
# 测试
# 进入docker容器内部
$docker attach 20bca89f485b
[root@20bca89f485b /]# cd /home
[root@20bca89f485b home]# ls
# 在容器内新建一个文件
[root@20bca89f485b home]# touch forcopy.sh
[root@20bca89f485b home]# ls
forcopy.sh
[root@20bca89f485b home]# exit
exit
# 拷贝测试
$su root
Password:
root@SEN:/home/hongsen# docker cp 20bca89f485b:/home/forcopy.sh /home
root@SEN:/home/hongsen# ls /home
forcopy.sh hongsen
# 拷贝是一个手动国产,使用-v 数据卷的方法,可以实现自动同步