docker操作(二)

news/2025/2/13 23:08:05/

目录

    • 镜像操作
    • 搜索mysql镜像
    • 拉取镜像
    • 查看镜像
    • 删除镜像
    • 容器操作
    • 运行镜像,启动容器
    • 查看运行的容器
    • 查看容器日志
    • 停止容器
    • 启动容器
    • 删除容器
    • 进入容器
    • 上传文件
    • 将容器转成镜像
    • 存储镜像
    • 自动启动容器
    • 实时监控容器资源使用情况
    • 获得Docker容器进程ID
    • 其他
    • 更多命令

镜像操作

比如:我们想安装mysql。

搜索mysql镜像

其实就是去https://hub.docker.com/,docker仓库帮我们搜索到myqsl镜像。
命令:docker search mysql

[root@MiWiFi-R3A-srv ~]# docker search mysql
INDEX       NAME                                        DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/mysql                             MySQL is a widely used, open-source relati...   9131      [OK]       
docker.io   docker.io/mariadb                           MariaDB is a community-developed fork of M...   3230      [OK]       
docker.io   docker.io/mysql/mysql-server                Optimized MySQL Server Docker images. Crea...   676                  [OK]
docker.io   docker.io/centos/mysql-57-centos7           MySQL 5.7 SQL database server                   68                   
docker.io   docker.io/centurylink/mysql                 Image containing mysql. Optimized to be li...   61                   [OK]
docker.io   docker.io/mysql/mysql-cluster               Experimental MySQL Cluster Docker images. ...   61                   
docker.io   docker.io/deitch/mysql-backup               REPLACED! Please use http://hub.docker.com...   41                   [OK]
。。。。

index:索引
name:镜像名字
DESCRIPTION:描述
STARS:关注的人数,单位K
OFFICIAL:是否是官方发布的
AUTOMATED:是否自动配置,ok表示直接运行就好都配置好了

推荐直接去仓库里找

拉取镜像

docker pull 镜像名:tag
tag是可选的,tag表示标签,多为软件的版本,默认 是latest
docker pull mysql 默认下载的是latest,最新的版本
上面搜索出的没有显示出版本号,可以去docker仓库里查看:
在这里插入图片描述
在这里插入图片描述
可以看到很多的版本,直接把命令复制下来运行就ok。

这里装docker pull mysql:5.7

[root@MiWiFi-R3A-srv ~]# docker pull mysql:5.7
Trying to pull repository docker.io/library/mysql ... 
5.7: Pulling from docker.io/library/mysql
619014d83c02: Pull complete 
9ced578c3a5f: Pull complete 
731f6e13d8ea: Pull complete 
3c183de42679: Pull complete 
6de69b5c2f3c: Pull complete 
00f0a4086406: Pull complete 
84d93aea836d: Pull complete 
e2dd1f3e5a3d: Pull complete 
98fb37478ee6: Pull complete 
57eb21662ebf: Pull complete 
e95057f0a050: Pull complete 
Digest: sha256:cf6899e980c38071a78ded028de40e65286bfbbb746b97617ac4c9a84c4e812d
Status: Downloaded newer image for docker.io/mysql:5.7

查看镜像

查看所有镜像:docker images

[root@MiWiFi-R3A-srv ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/mysql     5.7                 c4f186b9e038        13 days ago         435 MB

REPOSITORY:表示从哪里下载的镜像
TAG:标签
IMAGE ID :镜像id,唯一的
CREATED:镜像创建时间
SIZE:镜像大小

删除镜像

命令:docker rmi 镜像id

[root@MiWiFi-R3A-srv ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/mysql     5.7                 c4f186b9e038        13 days ago         435 MB
docker.io/mysql     latest              791b6e40940c        13 days ago         465 MB

删除mysql:latest镜像:

[root@MiWiFi-R3A-srv ~]# docker rmi 791b6e40940c
Untagged: docker.io/mysql:latest
Untagged: docker.io/mysql@sha256:6d0741319b6a2ae22c384a97f4bbee411b01e75f6284af0cce339fee83d7e314
Deleted: sha256:791b6e40940cd550af522eb4ffe995226798204504fe495743445b900e417a51
Deleted: sha256:a3c92ad464abbee6d08856efd404df8c43e9d991b9253bed8281e452d8021dfa
Deleted: sha256:3eb0379ecdc39f86da90c491765187e40dda381e57f319dd21afd0b1e2c40158
Deleted: sha256:fe814f19102e93fd9e2c12b4c864d110bbe4884ff4c5c34e2e1d96341ec17778
Deleted: sha256:f973fa93f201d11a3a6ccf900614fa6e25f4cf899da69f163510560263642d0e
Deleted: sha256:db53286cf6b77826bd35675098bfa76863ace9a04b4e28f4d8340d53c23821e8
[root@MiWiFi-R3A-srv ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/mysql     5.7                 c4f186b9e038        13 days ago         435 MB

注意:同一镜像有多个Tag情况下,执行 docker rmi 镜像ID 指令无法删除
docker rmi -f 镜像ID 会把同一镜像的所有tag的镜像都删除
例如:liuzhihui123/mysql:5.7liuzhihui123/mysql:5.8的镜像id,都是aadd21bbf831 ,使用镜像id,是删不了的,强制删除,同一镜像id的两个不同tag镜像都会删除。

[root@MiWiFi-R3A-srv data]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
liuzhihui123/mysql   5.7                 aadd21bbf831        16 minutes ago      435 MB
liuzhihui123/mysql   5.8                 aadd21bbf831        16 minutes ago      435 MB
docker.io/mysql      5.7                 c4f186b9e038        2 weeks ago         435 MB
[root@MiWiFi-R3A-srv data]# docker rmi aadd21bbf831
Error response from daemon: conflict: unable to delete aadd21bbf831 (must be forced) - image is referenced in multiple repositories

解决:使用镜像名/tag的方式,删除即可

[root@MiWiFi-R3A-srv data]# docker rmi liuzhihui123/mysql:5.7
Untagged: liuzhihui123/mysql:5.7
[root@MiWiFi-R3A-srv data]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
liuzhihui123/mysql   5.8                 aadd21bbf831        20 minutes ago      435 MB
docker.io/mysql      5.7                 c4f186b9e038        2 weeks ago         435 MB

容器操作

获取镜像(类似QQ.exe)->运行镜像->产生容器(正在运行的软件)

运行镜像,启动容器

同一个镜像可以运行多次,产生多个相互隔离的容器
命令:docker run --name container-name-d image-name
--name 自定义容器名,不指定自动生成
image-name 指定镜像模板
-i 以交互模式运行容器,通常与 -t 同时使用;
-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-d 后台运行容器,并返回容器ID;
-e 设置环境变量
-p:主机端口映射到容器内部的端口
-v:主机和容器的目录映射关系,":"前为主机目录,之后为容器目录

例如:
1.直接运行mysql:5.7镜像,MyFirstMysql 自定义的容器名,mysql:5.7镜像模板

[root@MiWiFi-R3A-srv ~]# docker run -e MYSQL_ROOT_PASSWORD=123456 --name MyFirstMysql  -it mysql:5.7 

-e:设置环境变量,不一定要设置,有些镜像要求要设置一些环境变量,有些不需要
mysql不设置就会要求设置一些参数:

[root@MiWiFi-R3A-srv ~]# docker run   --name MyFirstMysql  -it mysql:5.7 
2020-02-15 11:35:02+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.29-1debian9 started.
2020-02-15 11:35:02+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2020-02-15 11:35:02+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.29-1debian9 started.
2020-02-15 11:35:02+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specifiedYou need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD

具体可以去docker仓库的mysql镜像去查看:
在这里插入图片描述

2.后台运行mysql:5.7镜像,MyFirstMysql 自定义的容器名,mysql:5.7镜像模板

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/mysql     5.7                 c4f186b9e038        13 days ago         435 MBdocker run  -p 3306:3306  --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
如果查看容器时,发现是exit状态的时候,加tail -f /dev/nulldocker run  -p 3306:3306  --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7  tail -f /dev/null
5a0065312760737ef72003d1430cbd2f4321c12be578d004d6c43b0bd399136a
后台运行时,如果不加tail -f /dev/null,容器一启动立马又关闭,docker容器运行必须有一个前台进程, 
如果没有前台进程执行,容器认为空闲,就会自行退出,通过执行此操作,即使主命令在后台运行,
容器也不会停止,因为tail会在前台继续运行。

3.端口映射以及目录映射
-p 3306:3306 前面是主机端口,后面是容器内部的端口
-v /usr/local/docker/mysql/data:/var/lib/mysql 把主机的/usr/local/docker/mysql/data文件夹挂载到mysql容器的/var/lib/mysql文件夹里面 改mysql的配置文件就只需要把mysql配置文件放在自定义的文件夹下(/usr/local/docker/mysql/data

docker run -p 3306:3306 --name mysql   -v /usr/local/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
555fa51469e12c108a95b7f574f22b312405474174fb8f714b254cd582ea4d15

4.指定配置启动
出了使用-v来改变配置,还可以在启动的时候直接指定一些参数

docker run ‐‐name some‐mysql ‐e MYSQL_ROOT_PASSWORD=my‐secret‐pw ‐d mysql:tag ‐‐character‐set‐ server=utf8mb4 ‐‐collation‐server=utf8mb4_unicode_ci 
指定mysql的一些配置参数

防火墙要关闭或者开放3306端口,客户端才能连接上哦

查看运行的容器

docker ps:查看正在运行的镜像

[root@MiWiFi-R3A-srv ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES
acc4be929d97        mysql:5.7           "docker-entrypoint..."   16 seconds ago      Up 15 seconds       3306/tcp, 33060/tcp   MyFirstMysql

STATUS:up表示在运行,exit,表示停止

docker ps -a:显示所有的容器,包括未运行的。

查看容器日志

命令:docker logs 容器id

$ docker logs [OPTIONS] CONTAINEROptions:--details        显示更多的信息-f, --follow         跟踪实时日志--since string   显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)--tail string    从日志末尾显示多少行日志, 默认是all-t, --timestamps     显示时间戳--until string   显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)

查看最后十条日志:docker logs --tail=10 CONTAINER_ID
查看最近30分钟的日志::docker logs --since 30m CONTAINER_ID

停止容器

命令:docker stop 容器id或者容器名
docker stop $(docker ps -a -q):停止所有容器

启动容器

命令:docker start 容器id或者容器名

删除容器

命令:docker rm 容器id
docker rm $(docker ps -a -q):删除所有容器

进入容器

方式一:推荐
命令:docker exec -it container_id /bin/bash
即可进入容器内部进行操作

[root@MiWiFi-R3A-srv data]# docker exec -it  1f0fff71af5e  /bin/bash
root@1f0fff71af5e:/# 
出现rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:235: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory"
把 /bin/bash换成sh

exit退出后,容器任然处于运行状态

root@1f0fff71af5e:/# exit
exit
[root@MiWiFi-R3A-srv data]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
1f0fff71af5e        mysql:5.7           "docker-entrypoint..."   3 minutes ago       Up 3 minutes        0.0.0.0:3306->3306/tcp, 33060/tcp   mysql

方式二:已经过时,不推荐使用
命令:docker attach container_id
当docker容器在 “-d”守护态运行的时候,那么这个时候,用户就无法直接进入到容器中去,docker attach 容器id 就会一直卡着。因为此时容器运行的进程是ssh,而不是/bin/bash 也没有虚拟终端(-it)参数,所以是进入不到的,
那么这种情况下,该如何attach进去并进入到一个/bin/bash里呢?使用方式一。
就算能进去,在exit出来的时候,容器会关闭。

上传文件

docker cp /root/test.txt ecef8319d2c8:/root/

将容器转成镜像

进入容器进行了一些开发,我要将这些修改保存下来。
先去https://hub.docker.com/里注册一个账号

命令:docker commit -m "Added mysql:5.7" -a "liuzhihui" 1f0fff71af5e liuzhihui123/mysql:5.7
-m 参数用来来指定提交的说明信息
-a 可以指定用户信息的
1f0fff71af5e 容器的id
liuzhihui123/mysql:5.7 docker hub账号/仓库名:tag信息
-p :在commit时,将容器暂停。

[root@MiWiFi-R3A-srv data]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
liuzhihui123/mysql   5.7                 e2ff97f69e77        About an hour ago   435 MB
docker.io/mysql     5.7                 c4f186b9e038        2 weeks ago         435 MB

存储镜像

先登陆:docker login
命令:docker push dockerHub账号/仓库名:tag信息

docker push liuzhihui123/mysql:5.7

在docker hub中即可看到上传上去的镜像
在这里插入图片描述


自动启动容器

重启虚拟机,并设置开机启动docker,有些容器如果也想自动启动,命令如下

docker update 容器名或id  --restart=always

restart参数有三个可选值:no,on-failure,always

  • no为默认值,表示容器退出时,docker不自动重启容器
  • on-failure表示,若容器的退出状态非0,则docker自动重启容器,还可以指定重启次数,若超过指定次数未能启动容器则放弃
  • always表示只要容器退出,则docker将自动重启容器

实时监控容器资源使用情况

[root@localhost ~]# docker stats

在这里插入图片描述
因为只显示容器id,不显示容器名,不方便看。
修改命令

[root@localhost ~]# docker stats $(docker ps --format '{{.Names}}')

在这里插入图片描述
舒服多了

获得Docker容器进程ID

1.列出当前容器

[root@localhost conf]# docker ps --format '{{.ID}} {{ .Names }}'
3f8c408008d6 kibana
bda79a89dc53 nginx
703e6c6ff699 elasticsearch
ba18b874b305 rabbitmq
ee28ef78b266 redis
d9e048b0329d mysql

2.获取容器进程ID

[root@localhost conf]# docker inspect -f '{{ .State.Pid }}' elasticsearch
10421

其他

docker tag: https://www.cnblogs.com/pzk7788/p/10180919.html
docker info:查看docker信息

更多命令

https://docs.docker.com/engine/reference/commandline/docker/


http://www.ppmy.cn/news/167571.html

相关文章

VS错误代码列

0-操作成功完成。 1-函数不正确。 2-系统找不到指定的文件。 3-系统找不到指定的路径。 4-系统无法打开文件。 5-拒绝访问。 6-句柄无效。 7-存储控制块被损坏。 8-存储空间不足,无法处理此命令。 9-存储控制块地址无效。 10-环境不正确。 11-试图加载格…

2007年上半年 网络工程师 上下午试卷【附带答案】

2004-2017年真题答案【0.23RMB】自取 2007年上半年 网络工程师 上午试卷 ● (1) 不属于计算机控制器中的部件。(1)A.指令寄存器IR  B.程序计数器PC  C.算术逻辑单元ALU …

旧电脑改造服务器或云电脑和外网访问家庭nas/软路由实战记录

旧电脑改造服务器和外网访问家庭nas/软路由实战记录 对于旧电脑,很多时候都闲置在家,技术好一些的同学可能会把他改造成软路由,但是很多旧电脑都只有百兆接口,作为软路由也未必能满足现在家里动辄500M,1000M的宽带。技术差一些的…

[WinAPI]通过Windows系统CLSID(GUID)打开系统指定窗口,及部分[上帝模式]命令

CLSID是类标识符,windows有众多的类对象,我门调用这些类对象就可以实现很多计算机操作, 用户在图形界面上找找找点点点,费时费力,程序员可以给用户提供脚本或者程序提供按钮完成"一键打开"系统窗口. 脚本就是直接保存*.bat文件,程序的话通过程序平台的Process类交互…

第三章、ansible常用模块——新手快速入门

文章目录 一、 查看系统上安装的所有模块二、ansible常用模块1、常用模块之--USER2、常用模块之--shell3、常用模块之--copy4、常用模块之--template5、常用模块之--file6、常用模块之--lineinfile7、常用模块之-- yum_repository8、常用模块之--yum9、常用模块之-- service10、…

第三章、Ansible常用模块—新手快速入门

第三章、Ansible常用模块——新手快速入门 文章目录 一、 查看系统上安装的所有模块二、ansible常用模块 1、常用模块之–USER2、常用模块之–shell3、常用模块之–copy4、常用模块之–template5、常用模块之–file6、常用模块之–lineinfile7、常用模块之-- yum_repository8…

OpenStack Neutron浅析(三)

1. 基础知识 1.1 防火墙(firewall) 防火墙是依照特定的规则来控制进出它的网络流量的网络安全系统。一个典型的场景是在一个受信任的内网和不受信任的外网比如 Internet 之间建立一个屏障。防火墙可以是电脑上运行的软件,也可以是独立的硬件…

Neutron 理解 (8): Neutron 是如何实现虚机防火墙的 [How Neutron Implements Security Group]

原文地址:http://www.cnblogs.com/sammyliu/p/4658746.html 1. 基础知识 1.1 防火墙(firewall) 防火墙是依照特定的规则来控制进出它的网络流量的网络安全系统。一个典型的场景是在一个受信任的内网和不受信任的外网比如 Internet 之间建立一…