Docker学习(二) -- docker原生命令

1. 帮助启动类命令

# 启动docker
systemctl start docker
# 停止docker
systemctl stop docker
# 重启docker
systemctl restart docker
# 查看docker状态
systemctl status docker
# 开机启动
systemctl enable docker
# 查看docker概要信息
docker info
# 查看docker总体帮助文档
docker --help
# 查看docker命令帮助文档
docker 具体命令 --help

2. 镜像相关命令

2.1 查看本地库镜像

[root@yhx ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   5 months ago   13.3kB

其中:

  • repository:表示镜像的仓库员
  • tag:镜像的标签版本号
  • image id:镜像id
  • created:镜像创建时间
  • size:镜像大小

注意:统一仓库源可以有多个tag版本,代表这个仓库源的不同个版本,我们使用repository:tag来定义不同的镜像
如果不指定一个镜像的版本标签,例如只使用ubuntu,docker将默认使用ubuntu:lated镜像

2.2 查找远程库镜像:

[root@yhx ~]# docker search tomcat
NAME                                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
tomcat                                         Apache Tomcat is an open source implementati…   3282      [OK]       
tomee                                          Apache TomEE is an all-Apache Java EE certif…   94        [OK]       
bitnami/tomcat                                 Bitnami Tomcat Docker Image                     44                   [OK]
arm32v7/tomcat                                 Apache Tomcat is an open source implementati…   11                   
arm64v8/tomcat                                 Apache Tomcat is an open source implementati…   7                    
rightctrl/tomcat                               CentOS , Oracle Java, tomcat application ssl…   7                    [OK]
amd64/tomcat                                   Apache Tomcat is an open source implementati…   3                    
jelastic/tomcat                                An image of the Tomcat Java application serv…   3                    
tomcat2111/pisignage-server                    PiSignage Server                                3                    [OK]
cfje/tomcat-resource                           Tomcat Concourse Resource                       2                    
oobsri/tomcat8                                 Testing CI Jobs with different names.           2                    
chenyufeng/tomcat-centos                       tomcat基于centos6的镜像                              1                    [OK]
tomcatling/jupyterhub_aws                                                                      1                    
tomcat2111/bitbucket-pipelines-elasticsearch   Elasticsearch for Bitbucket's Pipelines         0                    
tomcat2111/phpredisadmin                       This is a Docker image for phpredisadmin        0                    [OK]
store/microsoft/defaultpublisher               Zulu for Azure build of OpenJDK                 0                    
softwareplant/tomcat                           Tomcat images for jira-cloud testing            0                    [OK]
tomcatengineering/pg_backup_rotated            Clone of martianrock/pg_backup_rotated but w…   0                    
s390x/tomcat                                   Apache Tomcat is an open source implementati…   0                    
tomcatengineering/docker_swarm_exporter        Prometheus metrics exporter for Docker Swarms   0                    
tomcat2111/redaxo                              Redaxo                                          0                    
tomcat2111/papercut-mf                         PaperCut MF Application Server                  0                    
tomcat2111/nextcloud                           Nextcloud container with environment variabl…   0                    [OK]
tomcat0823/auto1                                                                               0                    
tomcat2111/piwik                               Matomo (formerly Piwik) image                   0                    
[root@yhx ~]# 

# 只显示点赞数最多的5条
[root@yhx ~]# docker search --limit 5 redis
NAME                     DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
redis                    Redis is an open source key-value store that…   10657     [OK]       
bitnami/redis            Bitnami Redis Docker Image                      211                  [OK]
bitnami/redis-sentinel   Bitnami Docker Image for Redis Sentinel         34                   [OK]
circleci/redis           CircleCI images for Redis                       12                   [OK]
bitnami/redis-exporter  

在这里插入图片描述

2.3 下载镜像

docker pull 镜像名字
# 上述等价于
docker pull 镜像名字:latest
#或者将上版本号
docker pull 镜像名字 [:tag]
[root@yhx ~]# docker pull redis
Using default tag: latest
latest: Pulling from library/redis
a2abf6c4d29d: Pull complete 
c7a4e4382001: Pull complete 
4044b9ba67c9: Pull complete 
c8388a79482f: Pull complete 
413c8bb60be2: Pull complete 
1abfd3011519: Pull complete 
Digest: sha256:db485f2e245b5b3329fdc7eff4eb00f913e09d8feb9ca720788059fdc2ed8339
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest
[root@yhx ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
redis         latest    7614ae9453d1   2 months ago   113MB
hello-world   latest    feb5d9fea6a5   5 months ago   13.3kB

2.4 查看镜像、容器、数据卷所占空间

[root@yhx ~]# docker system df 
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          2         1         112.7MB   112.7MB (99%)
Containers      1         0         0B        0B
Local Volumes   0         0         0B        0B
Build Cache     0         0         0B        0B

2.5 删除镜像

docker rmi 镜像名称/镜像id
[root@yhx ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
redis         latest    7614ae9453d1   2 months ago   113MB
hello-world   latest    feb5d9fea6a5   5 months ago   13.3kB
[root@yhx ~]# docker rmi redis
Untagged: redis:latest
Untagged: redis@sha256:db485f2e245b5b3329fdc7eff4eb00f913e09d8feb9ca720788059fdc2ed8339
Deleted: sha256:7614ae9453d1d87e740a2056257a6de7135c84037c367e1fffa92ae922784631
Deleted: sha256:49c70179bc923a7d48583d58e2b6c21bde1787edf42ed1f8de9e9b96e2e88e65
Deleted: sha256:396e06df5d1120368a7a8a4fd1e5467cdc2dd4083660890df078c654596ddc1c
Deleted: sha256:434d118df2e9edb51238f6ba46e9efdfa21be68e88f54787531aa39a720a0740
Deleted: sha256:2047f09c412ff06f4e2ee8a25d105055e714d99000711e27a55072e640796294
Deleted: sha256:13d71c9ccb39b206211dd1900d06aa1984b0f5ab8abaa628c70b3eb733303a65
Deleted: sha256:2edcec3590a4ec7f40cf0743c15d78fb39d8326bc029073b41ef9727da6c851f
[root@yhx ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   5 months ago   13.3kB
# 删除多个
docker rmi -f id1 id2
# 删除全部
docker rmi -f $(docker images -qa)

2.6 导出和导入镜像

此命令很重要,一般用于多台服务器发布,我们只需要将docker文件上传到一个服务器,测试无误后,save此镜像,再scp到其他服务器,在load,就有一个一模一样的镜像了。

  • save:将镜像转为tar文件
  • load:转入镜像的tar文件
[root@yhx ~]# docker save -o redis.tar 7614ae9453d1
[root@yhx ~]# ls
redis.tar
[root@yhx ~]# rm -rf redis.tar 
[root@yhx ~]# docker save -o redis.tar redis
[root@yhx ~]# ls
redis.tar
[root@yhx ~]# docker load -i redis.tar 
Loaded image: redis:latest

3. 容器相关命令

3.1 启动容器

docker run [options] images [command] [arg...]

options可选参数:

  • –name:为容器指定一个名称
  • -d:后台运行容器并返回容器id,也即启动守护式容器(后台运行)
  • -i:以交互模式运行容器,通常与-t同时使用
  • -t:为容器重新分配一个伪输入终端,通常与-i同时使用,也即启动交互式容器(前台有伪终端,等待交互)
  • -P:随机端口映射
  • -p:指定端口映射
    在这里插入图片描述
3.1.1 端口映射:

比如我们想访问redis,但是redis在docker内部,所以我们必须通过一个端口访问docker,docker拿着这个端口对应的端口去内部访问。

-p 6379:6380,就是docker内部redis暴露的端口是6380,而宿主机对外暴露的端口是6379,要想访问docker内的redis,我们需要访问宿主机的6379端口

3.1.2 交互式终端启动:

可以进入到启动的容器内部

[root@yhx ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    ba6acccedd29   5 months ago   72.8MB
hello-world   latest    feb5d9fea6a5   5 months ago   13.3kB
[root@yhx ~]# docker run -it ubuntu /bin/bash
root@7a24369c5aa1:/# ls
bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

# 给容器指定名称
[root@yhx ~]# docker run --name=myU1 ubuntu

在这里插入图片描述

3.2 罗列所有正在运行的容器

docker ps [options]

options可选项:

  • -a:罗列当前所有正在运行的容器+历史上运行过的
  • -l:显示最近创建的容器
  • -n:显示最近n个创建的容器
  • -q:静默模式,只显示容器编号
[root@yhx ~]# docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED             STATUS                        PORTS     NAMES
b4f42505a03f   hello-world   "/hello"      6 seconds ago       Exited (0) 5 seconds ago                sad_snyder
7a24369c5aa1   ubuntu        "/bin/bash"   8 minutes ago       Exited (130) 2 minutes ago              charming_carver
1fe574be2d72   ubuntu        "/bin/bash"   About an hour ago   Exited (129) 31 minutes ago             competent_fermat
40b652812796   hello-world   "/hello"      5 hours ago         Exited (0) 5 hours ago                  loving_wilson

3.3 退出容器

如何从容器内部退出?

  • exit:run进入容器,exit退出,容器停止
  • ctrl+p+q:run进入容器,ctrl+p+q退出,容器不停止
[root@yhx ~]# docker run -it --name=myU2 ubuntu
root@74bc8360c83d:/# exit
exit
[root@yhx ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@yhx ~]# docker run -it --name=myU3 ubuntu
root@0de743d939f5:/# 
[root@yhx ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED         STATUS         PORTS     NAMES
0de743d939f5   ubuntu    "bash"    8 seconds ago   Up 7 seconds             myU3
[root@yhx ~]# 

3.4 重启、停止、删除容器

# 重启容器
docker restart id/容器名
# 停止容器
docker stop id/容器名
# 强制停止容器
docker kill id/容器名
# 删除已经停止的容器
docker rm 容器名称/id
# 强制删除容器
docker rm -f 容器名称/id

3.5 启动守护式容器

docker run -d 容器名

我们尝试启动一下centos镜像:

[root@yhx docker]# docker run -d --name=centos8 centos
3debce674ad8a24f55adef4c874b09a13d5c9b7517eddd5ab39edee46c187c93
[root@yhx docker]# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                     PORTS     NAMES
3debce674ad8   centos    "/bin/bash"   3 seconds ago   Exited (0) 2 seconds ago             centos8
[root@yhx docker]# 

通过docker ps -a 命令我们可以看到已经停止的容器。

于是疑惑产生了, -d 是保证容器在后台运行,为什么我的容器停止运行了呢?

前面提到过, docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 中有一个 COMMAND 参数,容器启动后会执行 COMMAND命令,它的默认值为 /bin/bash。也就是说容器在后台启动成功后,执行了 COMMAND 命令后直接关闭了。

了解到该原理后,我们可以通过在 docker run -d 后增加一个驻留在进程中长期运行的命令就可以保证容器不关闭了。

[root@yhx docker]# docker run -d --name=centos9 centos tail -f /dev/null
8da9a8358b679f83dac1a8a98b8620e60d37e3c1b8680483bd3448e4de1f12b5
[root@yhx docker]# docker ps -a
CONTAINER ID   IMAGE     COMMAND               CREATED         STATUS                     PORTS     NAMES
8da9a8358b67   centos    "tail -f /dev/null"   3 seconds ago   Up 2 seconds                         centos9
3debce674ad8   centos    "/bin/bash"           3 minutes ago   Exited (0) 3 minutes ago             centos8
[root@yhx docker]# 

3.6 查询容器内部信息

# 查看容器日志
docker logs 容器id
# 查看容器内运行的进程
docker top 容器id
# 查看容器内部细节
docker inspect 容器id

3.7 进入正在运行的容器并以命令行交互

# 重新进入正在运行的容器
docker exec -it 容器id bashShell
# 重新进入正在运行的容器, 不建议使用
docker attach 容器id

区别:

  • attach直接进入容器启动命令的终端,不会启动新的进程,用exit退出,会导致容器的停止
  • exec是在容器中打开新的终端,并且可以启动新的进程,用exit退出,不会导致容器的停止

3.8 文件在容器与主机中互相拷贝

# 从容器中转出
docker cp 容器id:容器目录地址 主机目录地址
# 例
docker cp 371ce72fa7f5:/usr/local/a.txt /home/aaa.txt

3.9 导入和导出容器

  • export导出容器:将容器的内容留作为一个tar归档文件,备份容器
  • import导入容器:从tar包中的内容创建一个新的文件系统再导入为镜像
# 导出
docker export 容器id > 文件名.tar
# 导入
cat 文件名.tar | docker import -镜像用户/镜像名:版本号
[root@yhx ~]# docker export 1be58e734dc9 > a.tar
[root@yhx ~]# ls
a.tar
[root@yhx ~]# cat a.tar | docker import - a/a
sha256:c4b611df9300f0cddbfe0a1fb61cd4fabc40bf8c7478b7bfbb5d5c5a83b23477
[root@yhx ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
a/a           latest    c4b611df9300   11 seconds ago   109MB
redis         latest    7614ae9453d1   2 months ago     113MB
ubuntu        latest    ba6acccedd29   5 months ago     72.8MB
hello-world   latest    feb5d9fea6a5   5 months ago     13.3kB
[root@yhx ~]# 

3.10 commit制作镜像

docker commit 提交容器副本使之成为一个新的镜像

docker commit -m="提交的描述信息" -a="作者" 容器id 要创建的目标镜像名:[标签名]

进入ubuntu的镜像,可以看到目前不带vim命令:

root@a893f307cfa1:/# vim lib
bash: vim: command not found

安装vim:

apt-get update
apt-get -y install vim

提交我们具备vim命令的ubuntu容器:

[root@yhx ~]# docker commit -m="with vim" -a="yhx" a893f307cfa1  with-vim/with-vim:1.0
sha256:9b6363fb0c60770935be5327e94c19c0ae550bc478a8df7ef4c1978f34ad3e77
[root@yhx ~]# docker images
REPOSITORY          TAG       IMAGE ID       CREATED             SIZE
with-vim/with-vim   1.0       9b6363fb0c60   6 seconds ago       175MB
a/a                 latest    c4b611df9300   About an hour ago   109MB
tomcat              latest    fb5657adc892   2 months ago        680MB
redis               latest    7614ae9453d1   2 months ago        113MB
ubuntu              latest    ba6acccedd29   5 months ago        72.8MB
hello-world         latest    feb5d9fea6a5   5 months ago        13.3kB
[root@yhx ~]# 

接下来启动我们新建的镜像,就可以包括vim功能了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值