安装docker
在Deepin下安装
卸载旧版本的docker:
sudo apt-get remove docker.io docker-engine
安装依赖:
sudo apt-get install apt-transport-https ca-certificates curl python-software-properties software-properties-common
下载并安装秘钥:
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
出现OK说明安装成功。
验证是否安装成功:
sudo apt-key fingerprint 0EBFCD88
添加软件源:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian jessie stable"
下面开始正式安装docker:
更新软件源:
sudo apt-get update
安装最新版本docker:
sudo apt-get install docker-ce
检查是否安装成功:
sudo docker version
在Deepin下docker是默认开机自启的,无需手动设置。
在WSL下安装
更新软件源:
sudo apt update
安装docker:
sudo apt-get install docker.io
启动docker服务:
sudo service docker start
此时虽然显示启动成功,其实是没有成功的,可以使用如下命令查看:
运行docker version
命令时,提示服务器没有打开:
此时需要以管理员身份运行如下代码:
sudo cgroupfs-mount
sudo service docker start
再次查看,发现服务已经启动了。
验证:
镜像加速
在 /etc/docker/deamon.json
中添加如下代码
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
添加完成之后,需要重启docker服务:
service docker restart
容器操作
查看本地镜像:
docker images
#或
docker image ls
查找镜像:
docker search [镜像名]
OFFICAL代表是官方的,AUTONATED代表支持自动化脚本。
拉取镜像:
docker pull hello-world
此时查看镜像:
删除镜像:
docker rmi -f 镜像名ID或镜像名:TAG
查看元信息:
docker image inspect hello-world
运行镜像:
docker run --name 容器名 -i -t -p 主机端口:容器端口 -d -v 主机目录:容器目录 镜像ID或镜像名:TAG
docker run --name hello -d hello-world
跑完之后会生成一个容器ID:
可通过日志验证hello 容器运行成功:
docker logs hello
docker部署mysql
同样,先要拉取镜像:
docker pull mysql
下图为正在下载镜像:
下载完成后如图:
查看镜像:
此时发现多了一个mysql的镜像。
运行mysql容器:
docker run -p 3306:3306 --name mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql
一般如果mysql运行成功,会自动启动mysql服务器,可通过如下命令查看容器中的后台进程:
docker container ps
进入mysql容器:
docker exec -it mysql /bin/bash
如此,mysql就已经可用了。
docker网络模式
Bridge
桥接模式,主要用来对外通信,docker默认的网络模式就是bridge。
使用bridge模式配置容器自定的网络配置:
# 配置容器的主机名
docker run --name t1 --network bridge -h [自定义主机名] -it --rm busybox
# 自定义DNS
docker run --name t1 --network bridge -dns 114.114 -it --rm busybox
#给host文件添加一条
docker run --name t1 --network bridge --add-host [hostname]:[ip] -it --rm busybox
host
主机网络,绑定到这种网络上的容器,内部使用的端口直接绑定在主机对应的端口,而如果容器服务没有使用端口,则无影响。
None
不使用任何网络,会形成一个封闭网络的容器。
container
共享另外一个网络的network namespace,和host模式差不多,只是这里不是使用宿主主机网路,而是使用容器的网络。
docker生成镜像
docker commit -m="描述信息" -a="作者" 容器ID或容器名 镜像名:TAG
docker commit -m="mysql测试生成镜像" -a="chenyc" mysql chenyc-mysql
通过查看镜像,发现确实生成了新镜像:
dockerfile格式命令
# 生成镜像的Dockerfile文件
# 根据什么基础镜像来创建,如果本地没有,会从仓库去pull
FROM chenyc-mysql
# 镜像由谁来构建,用处不大,即将被废弃
MAINTAINER chenyc
# 标签,没啥用,用来写描述信息的
LABEL author=chenyc date=20200524 version=1.0
# 把当前路径下的文件添加到镜像中去(根目录下)
ADD 1.txt /1.txt
# 指定暴露端口,后面可以指定网络协议
EXPOSE 80/tcp 80/udp
# 在镜像运行为容器后执行的命令
ENTRYPOINT ["cat", "1.txt"]
构建镜像命令:
docker build -t mydocker .
查看构建好的镜像:
运行容器并查看日志:
ADD 和 COPY区别:
基本功能都差不多。
ADD 支持从网络下载资源;
ADD 支持将本地的tar包解压,但是网络下载的不会解压
COPY不支持上述两个操作。