目录
- 镜像操作
- 搜索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.7
和liuzhihui123/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/