此篇为Docker笔记,文章可能存在疏忽,建议直接观看原视频。
视频地址:https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0
Docker基本组成 和 基本命令
- 镜像 image:就好比一个模板,可以通过这个模板创建容器服务。例如:tomcat镜像===>run===>tomcat容器(提供服务),通过这个镜像可以创建多个容器(最终服务/项目运行就是在容器中);
- 容器 container:Docker运用容器技术,运行一个或一组应用;操作:启动、停止、删除;
- 仓库 repository:存放镜像的地方;公有仓库、私有仓库;
测试安装成功
使用帮助:https://docs.docker.com/engine/reference/commandline/cli/
常用命令
镜像和容器的区别?
简单点说,镜像就类似操作系统光盘介质,容器相当于通过光盘安装后的系统。通过光盘(镜像),我们能在不同机器上部署系统(容器),系统内的操作只会保留在当前的系统(容器)中,如果要升级系统,需要使用到光盘,但是可能会导致操作系统的数据丢失
镜像命令
docker images
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 4 days ago 13.3kB
#只显示image id
$ docker images -q
feb5d9fea6a5
docker search 查询 (或者直接在dockerhub上查询)
$ docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 11480 [OK]
mariadb MariaDB Server is a high performing open sou… 4356 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 849 [OK]
# 可选项
--filter=STARS=4000 # 过滤 STARS大于4000的镜像
docker pull 下载
# 默认下载最新版 [:tag]指定版本 docker pull mysql:5.7
$ docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
07aded7c29c6: Pull complete # 分层下载 docker image的核心 联合文件系统
f68b8cbd22de: Pull complete
30c1754a28c4: Pull complete
1b7cb4d6fe05: Pull complete
79a41dc56b9a: Pull complete
00a75e3842fb: Pull complete
b36a6919c217: Pull complete
635b0b84d686: Pull complete
6d24c7242d02: Pull complete
5be6c5edf16f: Pull complete
cb35eac1242c: Pull complete
a573d4e1c407: Pull complete
Digest: sha256:4fcf5df6c46c80db19675a5c067e737c1bc8b0e78e94e816a778ae2c6577213d # 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # docker pull mysql 等价于 docker pull docker.io/library/mysql:latest$ docker pull mysql:5.7
5.7: Pulling from library/mysql
07aded7c29c6: Already exists # 已经存在的资源不会重复下载
f68b8cbd22de: Already exists
30c1754a28c4: Already exists
1b7cb4d6fe05: Already exists
79a41dc56b9a: Already exists
00a75e3842fb: Already exists
b36a6919c217: Already exists
5e11fe494f45: Pull complete
9c7de1f889a7: Pull complete
cf6a13d05a76: Pull complete
fc5aa81f393a: Pull complete
Digest: sha256:360c7488c2b5d112804a74cd272d1070d264eef4812d9a9cc6b8ed68c3546189
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
docker rmi 删除
$ docker rmi -f 镜像id 镜像id
$ docker rmi -f $(docker iamges -aq) # $()传递参数,表示删除全部镜像
容器命令
有了镜像才可以创建容器,下载一个centos镜像来测试。
$ docker pull centos
新建容器并启动
$ docker run [可选参数] imageId
# 参数说明
--name="Name" 容器名称
-d 后台运行方式
-it 使用交互方式运行,进入容器查看内容
-p 指定容器端口-p ip:主机端口:容器端口-p 主机端口:容器端口-p 容器端口容器端口
-P 随机指定端口# 启动并进入容器 -it 以交互的方式运行
[root@zcz /]$ docker run -it centos
[root@46e93dbe3361 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@46e93dbe3361 /]# exit
列出运行中的容器
#docker ps-a # 正在运行的容器 + 曾经运行的容器-n=? # 最近创建的容器-q # 显示正在运行的容器id
$ docker ps
$docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
46e93dbe3361 centos "/bin/bash" 4 minutes ago Exited (0) 2 minutes ago goofy_gagarin
f1e91564c179 hello-world "/hello" 24 hours ago Exited (0) 24 hours ago distracted_chaplygin
退出容器
exit # 退出并停止容器
Ctrl + P + Q # 退出容器,但不停止
删除容器
$ docker rm 容器id 容器id # 不能删除运行中的容器,可以使用-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 run -d centos
# 常见的坑:后台启动之后,docker ps发现centos停止了,why?
# 容器后台运行,就必须要有一个前台程序,docker发现没有应用,就会停止。
查看CPU状态
$ docker stats
查看日志
$ docker logs -ft --tail 10 容器id
查看容器中进程信息
$ docker top 容器id
查看镜像元数据
$ docker inspect 镜像id
进入当前正在运行的容器
# 通常容器都是以后台方式运行,有时需要进入容器,修改一些配置
$ docker exec -it 容器id /bin/bash # 进入容器之后开启一个新的终端
# 方式二
$ docker attach 容器id # 进入容器正在执行的终端,不会启动新进程
从容器拷贝文件到主机
$ docker cp 容器id:容器内路径 目的主机路径
# 后期可以使用卷的技术实现一个同步
[root@0c219b26f861 /]# cd home/
[root@0c219b26f861 home]# ls
[root@0c219b26f861 home]# touch hello.go
[root@0c219b26f861 home]# ls
hello.go
[root@0c219b26f861 home]# exit
exit
root@zcz:/home$ docker cp 0c219b26f861:/home/hello.go /home/
root@zcz:/home$ ls
hello.go zhuchangzhen