一、简介
Docker 是一个开源的应用容器引擎,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,这个容器是完全使用沙箱机制(限制容器内部对系统资源的访问),更重要的是容器性能开销极低。
正是因为Docker的各种特性,我们常用Docker来部署Web开发环境以及Web应用的发布。
二、安装教程
1、准备工作
不知道在干嘛,那就贴上去就完事了,注意docker的很多相关命令都需要管理员权限
(1)、更新软件包(有必要就换源)
sudo apt update
sudo apt upgrade
(2)、安装docker依赖(3)、添加Docker官方GPG密钥
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg
sudo apt-key add -
(4)、添加Docker软件源
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
2、安装
(1)、安装命令确实就一句话
apt-get install docker-ce docker-ce-cli containerd.io
(2)、配置用户组,需要重启生效
sudo usermod -aG docker $USER
三、相关命令
下面的命令会以hznuoj为例,替换为自己想要用的镜像即可
1、镜像相关命令
(1)、拉取镜像。命令可以从Docker Hub直接复制,使用冒号指定版本号(tag),没有默认最新
docker pull hznuoj/hznuoj:latest
(2)、启动镜像。参数配置如下:
- -d 指定容器运行于前台还是后台,默认为false
- -it 加上之后即不与启动的镜像交互(其实是 -i -t )
- --restart=always 指定容器停止后的重启策略:
- no:容器退出时不重启
- on-failure:容器故障退出(返回值非零)时重启
- always:容器退出时总是重启
- -p 指定端口映射,即容器内的端口(冒号右侧)映射到主机(冒号左侧)
端口映射:端口映射就是将容器内主机的一个端口映射到容器外主机的一个端口,提供相应的服务。当用户访问容器外IP的这个端口时,自动将请求映射到容器内的机器上。
- --name 启动的这个容器的名字,注意名字不能重复,即id
- -v 路径挂载,将内容内部文件(冒号右侧)挂载到主机(冒号左侧),注意:如果本机没有对应的文件/文件夹,默认生成文件夹,所以挂载之前需要提前创建好
挂载:挂载后容器外部文件发生改变同步到容器内部,从而实现数据同步,方便进行Web开发
sudo docker run \-d -it \--name=hznuoj \--restart=always \-p 80:80 \-v /var/hznuoj/static.php:/var/www/web/OJ/include/static.php \-v /var/hznuoj/upload:/var/www/web/OJ/upload \-v /var/hznuoj/data:/var/hznuoj/data \hznuoj/hznuoj:latest
(3)查看镜像
docker images
(4)、删除镜像。 -f 即force强制删除
docker rmi 镜像名/镜像ID
docker rmi -f 镜像名/镜像ID
2、容器相关命令
镜像相当于一个对象,那么容器就是一个实例
(1)、查看当前正在运行的容器
docker ps
(2)、开始、暂停、重启容器
docker start 容器ID/容器名
docker stop 容器ID/容器名
docker restart 容器ID/容器名
(3)、文件拷贝
从容器外拷贝到容器内,从容器内拷贝到容器外均可
docker cp mysql:/tmp/db.sql ~/db.sql
docker cp ~/db.sql mysql:/tmp/db.sql
(4)、删除容器。注意删除之前需要先stop
docker stop 容器名/容器ID
docker rm 容器名/容器ID
docker rm -f 容器名/容器ID
(5)、进入、退出容器
docker exec -it 容器名/容器ID
exit
四、从本地上传到dockerhub
1、启动容器
2、登录
docker login
3、commit
docker commit hznuoj hznuoj:latest
4、打tag
docker tag hznuoj:latest dzy521/hznuoj:latest
5、push到dockerhub
docker push dzy521/hznuoj:latest