Docker基础
Docker 常用命令
帮助命令
1. docker version # 显示docker的版本信息
2. docker info # 显示docker的系统信息,包括镜像和容器的数量
3. docker --help # 帮助命令
镜像命令
docker images
查看所有本地的主机上的镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 7 months ago 13.3kB
ubuntu 15.10 9b9cb95443b5 5 years ago 137MB
[root@localhost ~]#
# 解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
# 可选项
-a, --all # 列出所有镜像
-q, --quiet # 只显示镜像的id
例:docker images -aq 只显示所有的镜像
docker search
搜索镜像
[root@localhost ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 12453 [OK]
mariadb MariaDB Server is a high performing open sou… 4800 [OK]
#可选项 通过搜藏来过滤
--filter=stars=3000 # 搜索出来的镜像stars大于3000
例:
[root@localhost ~]# docker search mysql --filter=stars=3000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 12453 [OK]
mariadb MariaDB Server is a high performing open sou… 4800 [OK]
[root@localhost ~]#
docker pull
下载镜像
# 下载镜像 docker pull 镜像名 [:tag]
[root@localhost ~]# docker pull mysql
Using default tag: latest # 如果不写tag 默认就是latest
latest: Pulling from library/mysql
4be315f6562f: Pull complete # 分层下载 docker iamges 的核心 联合文件系统
96e2eb237a1b: Pull complete
8aa3ac85066b: Pull complete
ac7e524f6c89: Pull complete
f6a88631064f: Pull complete
15bb3ec3ff50: Pull complete
ae65dc337dcb: Pull complete
654aa78d12d6: Pull complete
6dd1a07a253d: Downloading 106.3MB/107.8MB
a32905dc9e58: Download complete
152d41026e44: Download complete
42e0f73ebe32: Download complete
Digest : sha256:dc255ca50a42b3589197000b # 签名地址
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
docker push
上传镜像
# 上传镜像 docker push 镜像名
docker rmi
删除镜像
# 根据image ID 删除
docker rmi -f 9b9cb95443b5 # 删除指定的容器
docker rmi -f 容器id 容器 id 容器 id # 加空格删除多个容器
docekr rmi -f $(docker images -aq) # 删除全部的容器
docker rmi -f `docker images -aq`
docker save、load
保存、加载镜像
# 保存镜像
docker save 70f311871ae1 > nginx.tar #打包镜像
# 同时将多个 Image 打包成一个文件
docker save -o images.tar nginx:9.0 tomcat:7.0
# 载入镜像
docker load -i nginx.tar
docker export
容器打包
# 将容器打包
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bca6dafc7857 2c67e9ee1dae "/bin/bash" About a minute ago Up About a minute 80/tcp admiring_bhabha
[root@localhost ~]# docker export bca6dafc7857 > centos:latest # 容器ID > 文件名
[root@localhost ~]# ll
总用量 434156
-rw-------. 1 root root 1685 10月 10 08:55 anaconda-ks.cfg
-rw-r--r--. 1 root root 444568064 10月 13 19:39 centos:latest
[root@localhost ~]#
docker rename
容器重命名
# 使用rename更改容器名字
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f8c6cb039673 192.168.111.150:5000/centos "/bin/bash" About an hour ago Up About an hour centos01
[root@localhost ~]# docker rename centos01 centos02
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f8c6cb039673 192.168.111.150:5000/centos "/bin/bash" About an hour ago Up About an hour centos02 # centos01更改为centos02
[root@localhost ~]#
容器命令
说明: 有镜像才能创建容器,我们这里使用 centos 的镜像来测试,就是虚拟一个 centos !
docker stats 查看进程
docker pull centos
新建容器并启动
# 命令
docker run [可选参数] image
# 常用参数说明
--name="Name" # 给容器指定一个名字
-d # 后台方式运行容器,并返回容器的id!
-i # 以交互模式运行容器,通过和 -t 一起使用
-t # 给容器重新分配一个终端,通常和 -i 一起使用
-P # 随机端口映射(大写)
-p # 指定端口映射(小结),一般可以有四种写法
docker run [可选参数] image
# 参数说明
--name="name" 容器名字 tomcat01 tomcat02 , 用来区分容器
(删除起过的名字 docker rm -f tomcat01)
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 -p 8080:8080
-P ip:主机端口:容器端口
-P 主机端口:容器端口 (常用) 主机端口映射到容器端口
-P 容器端口
容器端口
-p 随机指定端口
# 测试 启动并进入容器
[root@localhost ~]# docker run -it centos /bin/bash
WARNING: IPv4 forwarding is disabled. Networking will not work.
[root@a784aff52ba6 /]# ls # 查看容器内的centos 基础版本 很多命令不完善
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
[root@a784aff52ba6 /]#
列出所有运行的容器
# docker ps 命令
-a #列出当前正在运行的容器+带出历史运行过的容器
-n=? #显示最近创建的容器
-q # 只显示容器的编号
[root@1820fb100ed3 /]# docker ps
bash: docker: command not found
[root@1820fb100ed3 /]# exit
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eeba3bc61b96 ubuntu:15.10 "/bin/sh -c 'while t…" 2 days ago Up 2 days epic_zhukovsky
[root@localhost ~]# docker ps -aq
退出容器
exit # 容器停止退出
ctrl+P+Q # 容器不停止退出
启动和停止容器
docker start 容器 id #启动容器 (可以启用已经关闭的容器)
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前容器
常用其他命令
后台启动容器
# 命令 docker run -d 镜像名
[root@localhost ~]# docker run -d centos
# 问题docker ps 发现 centos 停止了
# 常见的坑 docker 容器使用后台运行 就必须要有一个前台进程, docker 发现没有应用了 就会自动停止
# nginx, 容器启动后, 发现自己没有提供服务, 就会立刻停止 ,就是没有程序了
查看日志
docker logs -f -t --tail 容器,没有日志
# 显示日志
-tf # 显示全部日志
--tail number # 要显示的日志条数
[root@localhost ~]# docker logs -tf --tail 10 容器id
查看容器中进程信息
# 命令 docker top 容器id
[root@localhost ~]# docker top 7f0ad55ec1e0
UID PID PPID C STIME TTY TIME CMD
root 110821 110797 0 20:35 pts/0 00:00:00 /bin/bash
[root@localhost ~]#
查看容器/镜像的元数据
# 命令
docker inspect 容器id
# 测试
[root@localhost ~]# docker inspect 7f0ad55ec1e0
# 查看容器IP
[root@localhost images]# docker inspect -f {{.NetworkSettings}} f8c6cb039673
进入正在运行的容器
# 我们通常容器都是使用后台方式运行的,需要进入容器 修改一些配置
# 命令
docker exec -it 容器id bashShell (/bin/bash)
# 测试
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
374fee09f8f4 centos "/bin/bash" 5 minutes ago Up 5 minutes youthful_shamir
[root@localhost ~]# docker exec -it 374fee09f8f4 /bin/bash
[root@374fee09f8f4 /]# ls
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
[root@374fee09f8f4 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 02:13 pts/0 00:00:00 /bin/bash
root 15 0 0 02:20 pts/1 00:00:00 /bin/bash
root 30 15 0 02:20 pts/1 00:00:00 ps -ef
[root@374fee09f8f4 /]#
# 方式二
docker attach 容器id
# 测试
[root@localhost ~]# docker attach 374fee09f8f4
[root@374fee09f8f4 /]#
# docker exec -it # 进入容器后开启一个新的终端,可以在里面操作
# docker attach # 进入容器正在执行而定终端,不会启动新的进程!
从容器内拷贝文件到主机上
# 命令
docker cp 容器id:容器内路径 目的主机的路径
# 进入docker容器内部
[root@localhost home]# docker run -it centos /bin/bash
WARNING: IPv4 forwarding is disabled. Networking will not work.
[root@b177dc96f111 /]# cd /home
[root@b177dc96f111 home]# ls
# 在容器内新建一个文件
[root@b177dc96f111 home]# touch ziheng.java
[root@b177dc96f111 home]# exit
[root@localhost home]# docker ps -a -n1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b177dc96f111 centos "/bin/bash" 35 seconds ago Exited (0) 14 seconds ago strange_gates
# 将这文件拷贝出来到主机上
[root@localhost home]# docker cp b177dc96f111:/home/ziheng.java /home
[root@localhost home]# ls
cuiziheng ziheng.java
[root@localhost home]#
# 拷贝是一个手动过程,未来我们使用 -v 卷的技术,可以实现
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 文章作者
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果