docker的基本使用

docker.jpg

前几天学了一下docker,一方面是记录一下这些命令,另一方面为了复习一下,所以写了下面这些!有什么问题还请指正!

在Linux中下载docker

CentOS

1
yum install docker

ubunte

1
apt-get install docker.io

找不到包的话update一下

CentOSyum update

Ubuntuapt-get update

更换docker镜像源

/etc/docker/ 目录下修改或者新建daemon.json文件

1
2
3
4
5
{

"registry-mirrors": ["https://registry.docker-cn.com"]

}

Docker国内其他源:

Docker 官方中国区

https://registry.docker-cn.com

网易

http://hub-mirror.c.163.com

中国科技大学

https://docker.mirrors.ustc.edu.cn

阿里云的源需要注册,我没有去折腾

镜像相关的命令

搜索镜像

1
docker search 镜像名

这个没什么好说的,就是根据你给出的镜像名列出仓库中有的相关的镜像

可以加条件 -s star数

比如docker search -s 50 mysql就是star数在50K以上的镜像才会被列出来

等于就是增加搜索的条件,还有其他的参数可以自己查

从仓库pull镜像

这个命令就和git的pull差不多意思,git pull拉的是代码;docker pull拉的是镜像

1
2
docker pull 镜像名:版本号
版本号不写默认就是latest,最新的

比如拉MySQL的镜像:docker pull mysql

删除一个镜像

1
docker rmi 镜像名或ID

打包镜像

将镜像打包,方便移植到其他设备运行

1
docker save -o 打包后的名字.tar 镜像名

导入打包的镜像

1
docker load < 包名

容器操作

由镜像创建一个容器并运行

这里就以mysql为例:

1
docker run -di --name=mysql -p 3306:3306 -e TZ=Asia/Shanghai MYSQL_ROOT_PASSWORD=123456 mysql --lower_case_table_names=1

mysql的参数比较多一点

-d表示后台运行

-i表示交互式的操作(我也不太明白什么意思,后面弄明白了再更新)

–name是给生成的容器取名字

-p是端口的映射,冒号前面的是宿主机的端口,后面的是容器中的端口,意思就是容器中3306的端口映射到宿主机的3306端口,直接访问宿主机的3306端口就可以访问到docker中的MySQL。如果要在宿主机直接连接MySQL,可以ip a看一下docker的在宿主机的ip,然后通过那个ip的3306端口就可以访问了

MYSQL_ROOT_PASSWORD 这个是这只mysql的root用户密码

–lower_case_table_names=1 这个是不区分表的大小写,当初就是应为这个才入了docker的坑,直接在服务装的MySQL打死改不了这个大小写不敏感,一个项目里面刚好有有很多表是大写,数据库里面是小写的,我就是不想改成小写(傲娇脸),然后折腾几天都没能改好,后来就考虑了docker。在Windows下运行没问题,因为Windows本来就不区分大小写,到Linux下面就区分大小写了,项目部署 好久,都没能跑起来,报错找不到表,我当时还莫名其妙,明明有这个表怎么找不到呢,后来发现了这个坑。

运行Tomcat就简单些:

1
docker run -dp 8080:8080 tomcat镜像ID

上面都是在后台运行的,如果想要直接在

停止容器的运行

1
docker stop 容器名

启动创建的镜像

1
docker start 容器名

重启就是restart啦

进入到容器中

一个容器其实就是一个小的Linux环境,但是做了很多精简,只保留了必要的部分

有两种方式:

第一种:docker attach 容器名字或者ID

第二种:docker exec -it 容器名或ID /bin/bash

这两个的区别,如果第一种方式进去在exit,那会退出并且停止容器的运行,第二种exit不会停止运行

删除一个容器

1
docker rm 容器名或ID

由容器创建一个镜像

你从远程仓库拉的默认镜像,经过个性化的配置之后,就可以这样创建一个自己的镜像,然后在把镜像打包成压缩包,传到其他设备,导入之后就又可以在其他设备运行了

1
docker commit -a 这个镜像的作者 -m 提交时候的文字说明 容器名 创建的镜像名

查看容器

1
docker ps -aq

什么都不加就只会列出当前正在运行的容器

加上-a是列出所有的镜像,-q表示静默模式,只显示容器编号

docker rm (docker ps -aq)这个组合命令就是删除所有的容器