2.Docker命令实战

查看信息

重头戏肯定是与操作相关的,如果只是安装,那么将毫无意义。

查看版本号

首先我们来查看一下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官方仓库

这里拿nginx举例,搜索如下2.Docker命令实战_第1张图片

2.Docker命令实战_第2张图片

眼尖的小伙伴肯定看到下载命令了,命令如下,更多版本可以点击 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 hub上注册账号->创建仓库。2.Docker命令实战_第3张图片

注意我们推送前需要先登录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

仓库要求的名字如下

image.png

推送完毕,你们也可以搜索看到我的镜像

2.Docker命令实战_第4张图片

你可能感兴趣的:(docker,linux,java,python,centos)