查看信息
重头戏肯定是与操作相关的,如果只是安装,那么将毫无意义。
查看版本号
首先我们来查看一下docker对应的版本信息
docker version
信息如下
Client: Docker Engine - Community
Version: 20.10.10
API version: 1.41
Go version: go1.16.9
Git commit: b485636
Built: Mon Oct 25 07:44:50 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.10
API version: 1.41 (minimum version 1.12)
Go version: go1.16.9
Git commit: e2f740d
Built: Mon Oct 25 07:43:13 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.11
GitCommit: 5b46e404f6b9f661a205e28d59c982d3634148f8
runc:
Version: 1.0.2
GitCommit: v1.0.2-0-g52b36a2
docker-init:
Version: 0.19.0
GitCommit: de40ad0
可以看到,分为服务端与客户端,其中ec就是Engine - Community的简称了,其他信息也可以自己看一下。
查看详情信息
docker info
这个内容比较详细,这里就展示一部分了。
Server:
Containers: 4
Running: 1
Paused: 0
Stopped: 3
Images: 3
Server Version: 20.10.10
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
可以看到,这里写了我一共有四个容器,但是只有四个在运行,三个停止了,还有三个镜像文件。
查看帮助
这个大家自己看一下吧,帮助说明。
docker --help
镜像命令
点击链接搜索下载,可能访问会有些慢。
Docker官方仓库
眼尖的小伙伴肯定看到下载命令了,命令如下,更多版本可以点击 View Available Tags
查看。
下载镜像
# 注意 默认下载的是最新版本
docker pull nginx
# 这里我们随便挑一个其他版本下载
docker pull nginx:perl
查看镜像
# 该命令可以查看所有镜像,后面可以加下列参数
# -a 列出所有镜像
# -q 只显示镜像id
# --digests 显示镜像的摘要信息
docker images
删除镜像
docker rmi 镜像名/镜像id
# 如果有容器在运行 则需要加 -f 强制删除
docker rmi -f 镜像名/镜像id
这里要说明下,如果单单写镜像名,那么默认就会删除最新版本的,所以要加tag标签,如我要删除上面的nginx,则需要docker rmi nginx:perl
,当然,直接写对应镜像名也没有问题。
容器命令
启动容器
# 设置项 容器名
docker run [options] image
最简单的启动就是不加设置项
# 启动nginx
docker run nginx
启动效果如下,这时候我们无法输入其他命令了,所以一般我们会加设置项
docker run nginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2021/11/04 12:55:28 [notice] 1#1: using the "epoll" event method
2021/11/04 12:55:28 [notice] 1#1: nginx/1.21.3
2021/11/04 12:55:28 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6)
2021/11/04 12:55:28 [notice] 1#1: OS: Linux 3.10.0-957.el7.x86_64
2021/11/04 12:55:28 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/11/04 12:55:28 [notice] 1#1: start worker processes
2021/11/04 12:55:28 [notice] 1#1: start worker process 31
设置项
后台启动
# 这表示后台启动nginx
docker run -d nginx
容器命名
一般我们会给启动的容器取个名字,所以用--name=容器名,注意容器名是不能重复的,所以如果取的同名了会报错。
# 这表示给容器取名为mynginx
docker run --name=mynginx nginx
开启自启动
如果我们的服务器意外重启了,容器也需要随系统一起启动,所以要加--restart=always,默认是不会启动的。
# 这表示容器开启自启动
docker run -d --restart=always nginx
如果我们已经创建了容器,还可以执行更新命令,使其开机自启动,注意是容器名。
docker update 容器id/容器名 --restart=always
端口映射
我们的容器和主机是相互隔离的,如果没有设置该参数,会发现我们即便启动了nginx,也无法在外界访问到,所以需要开启端口映射。
# 这表示将容器内部的80端口映射给主机的88端口
docker run -d -p 88:80 nginx
修改容器文件
如果我们要修改容器里面的内容,其实有两个办法,一个方式是进入容器内修改,另一个方式是将容器内的文件映射到外部,修改外部的文件相当于将里面的内容给修改了。
进入容器
# 以nginx为例 进入容器 /bin/bash 相当于进入控制台
docker exec -it mynginx /bin/bash
# 我们可以在容器该目录下修改 index.html 页面
cd /usr/share/nginx/html
# 由于容器内没有装vi vim什么的 这里随便追加覆盖些内容
echo 'hello bb!
' > /usr/share/nginx/html/index.html
这样页面显示的内容就不一样了。
文件映射
我们可以将容器里面的文件映射到主机的某个目录下,这样只需要在外部修改相关配置就可以在容器内生效了。
# 映射文件 -v 前面是主机内文件,后面是容器内文件
docker run -d -p 80:80 -v /data/html:/usr/share/nginx/html nginx
#只需要在/data/html新增index.html 显示的主页就不一样了
echo 'hello bb' > /data/html/index.html
```bash
## 查看日志
对于容器运行的状态,我们需要日志来查看,命令如下。
```bash
# 加-f 表示滚动查看
docker logs -f nginx
文件复制
我们既可以将容器内的文件复制到主机,也可以将主机的文件复制到容器中,命令如下。
#把容器指定位置的东西复制出来 cp + 容器名/容器id : 容器内路径 主机路径
docker cp bbnginx:/etc/nginx/nginx.conf /data/conf/nginx.conf
#把外面的内容复制到容器里面 cp + 主机路径 容器名/容器id : 容器内路径
docker cp /data/conf/nginx.conf bbnginx:/etc/nginx/nginx.conf
提交镜像
因为是和容器相关的,所以还是放在这一节上讲,如果说我们对容器内的某些文件发生了改变,比如更改了首页,那我们想再开一个容器,难道又得重新配置吗?
不是的,我们可以将容器改变后提交为新的镜像,这样我们可以把原镜像删了,用我们自定义的即可。
这里不细讲了,直接介绍这一个命令。
# docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
docker commit -a "sharpbb" -m "新的首页" mynginx bbnginx:1.0
- -a 表示作者
- -m 表示提交的内容
- CONTAINER 可以是容器名或容器id
- REPOSITORY[:TAG] 表示镜像名:版本号 这里镜像名必须是小写形式的
镜像传输
我们又来了新的需求,我们想要在第二台机器上也用到这个镜像,这时候我们希望镜像能够像文件一样传输过去,可以吗?当然可以。
# 将我们之前的镜像打包 tar文件可以任意命名 后面的镜像文件需要一模一样
docker save -o mynginx.tar bbnginx:1.0
这时候将文件传输给别的机器,让其加载即可,命令如下。
docker load -i mynginx.tar
推送远程仓库
与git很相似对吧,上面的方式时候离线安装,但如果访问docker hub速度很快的话,用这个方式就可以了。
注意我们推送前需要先登录docker
# 登录和登出命令
docker login/logout
# 后面会提示输入用户id和密码即可
登录完毕,开始推送,一共分两步
# docker tag local-image:tagname new-repo:tagname
# 将本地镜像的名字改成仓库要求的名字 版本随便写
docker tag bbnginx:1.0 sharpbb/mynginx:1.0
# 推送 采用新的名字
# docker push new-repo:tagname
docker push sharpbb/mynginx:1.0
仓库要求的名字如下
推送完毕,你们也可以搜索看到我的镜像