Docker基本组成 和 基本命令https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0
- 镜像 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小结



