Docker - 安装和常用命令
简介
Docker是一个容器引擎,使用Docker可以快速的部署你的程序。
比如,我要在服务器上安装一个 nginx。我们不用之前的安装方法,而是用 Docker 安装。
先在服务器上安装上Docker,然后,执行如下命令,你的nginx就安装好了。
docker run -d -p 91:80 nginx
然后,你就可以通过 服务器地址:91 来访问 nginx。(前提:91端口已打开的)
这就是 Docker 的快速部署。
如果你安装过系统,那么你应该听过 Ghost,我们把现有的操作系统生成一个镜像文件,
那么安装的时候,直接通过这个 Ghost 文件安装即可。
Docker也一样,各种软件都有对应的 Docker 镜像,安装的时候,直接通过镜像安装即可。
Docker的安装
CentOS下的安装
首先我们要有一个CentOS系统,可以是买的阿里云或其它服务器。也可以是自己用VM虚拟的一台CentOS。
CentOS需要是 CentOS 7 版本,内核版本高于 3.10。查看内核版本的命令 uname -r
检查是否安装:
Docker安装后是以服务的形式存在的,所以看看有没有Docker服务即可。或直接看版本。systemctl list-units | grep docker
[root@localhost ~]# docker version
Client:
Version: 18.09.7
API version: 1.39
Go version: go1.10.8
Git commit: 2d0083d
Built: Thu Jun 27 17:56:06 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 18.09.7
API version: 1.39 (minimum version 1.12)
Go version: go1.10.8
Git commit: 2d0083d
Built: Thu Jun 27 17:26:28 2019
OS/Arch: linux/amd64
Experimental: false
如果没有安装那么可以安装了,安装又分为:
1、在线安装(通过注册 Docker 仓库)
2、离线安装(下载 Docker 安装包)
在线安装
先安装必要的包
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
设置yum源,安装Docker稳定版本的仓库
#阿里云来源(安装会快些)
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#官方来源
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装
#安装最新版
sudo yum -y install docker-ce docker-ce-cli containerd.io
#安装指定版本
sudo yum -y install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
列举版本
yum list docker-ce --showduplicates | sort -r
启动Docker & 开机启动
$ sudo systemctl start docker
$ sudo systemctl enable docker
查看Docker进程
[root@localhost ~]# ps -ef | grep docker
root 2444 1 0 20:02 ? 00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root 2575 1002 0 20:05 pts/0 00:00:00 grep --color=auto docker
CentOS下的卸载
$ sudo yum remove docker docker-common docker-selinux docker-engine
加速镜像源
不加速镜像源,下载镜像时,会特别慢。
新增一个 daemon 文件vi /etc/docker/daemon.json
内容如下:
{
"registry-mirrors": ["https://m9r2r2uj.mirror.aliyuncs.com"]
}
可以去阿里云登录自己的帐号,查看属于自己专属的加速地址。
重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
他山之石:
七牛云镜像中心
https://kirk-enterprise.github.io/hub-docs/#/user-guide/mirror
命令
在安装好 Docker 之后,下面要做的就是下载 Docker Hub 上现有的镜像。
然后,基于现有的镜像来新建容器,而容器就是我们最终要使用的东西。
关于 镜像 和 容器 的相关命令如下:
查询放在 Docker Hub 上的Java镜像
docker search java
下载镜像(下载特定版本,使用冒号的形式)
docker pull java
下载的是最新版本docker pull java:8
下载的java8.0
列出镜像
#方法1
docker images
#方法2
docker image ls
#根据仓库名列出镜像
docker images ubuntu
gl>[root@localhost ~]# docker images ubuntu
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 4c108a37151f 2 weeks ago 64.2MB
gl>[root@localhost ~]# docker images demo
REPOSITORY TAG IMAGE ID CREATED SIZE
demo latest f6df9c11fbb9 20 hours ago 670MB
删除镜像
docker rmi 7123ec940c88
新建并启动容器
例1
#基于nginx镜像启动一个容器,容器的80端口对应Host主机的91端口
docker run -d -p 91:80 nginx
docker run 命令可以新建并启动一个容器
参数:
-d 表示后台运行
-P 表示随机端口映射
-p 指定端口映射
-p可以使用的形式如下:
-p ip:hostPort:containerPort
-p ip::containerPort
-p hostPort:containerPort
-p containerPort
-network 指定网络模式
nginx 表示基于的是 nginx 镜像而启动的容器。
例2
#基于ubuntu镜像启动一个容器,启动后要和ubuntu交互,使用其bash命令。
docker run -it --rm ubuntu bash
-it: 这是两个参数 -i:表示交互式操作 -t:表示终端,因为我们要使用 bash ,所以我们需要交互式终端
-rm:表示此容器用完后就删掉
ubuntu:基础镜像
bash:表示启动后,启用 bash
gl>[root@localhost dockerfile]# docker run -it --rm ubuntu bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
5b7339215d1d: Pull complete
14ca88e9f672: Pull complete
a31c3b1caad4: Pull complete
b054a26005b7: Pull complete
Digest: sha256:9b1702dcfe32c873a770a32cfd306dd7fc1c4fd134adfb783db68defc8894b3c
Status: Downloaded newer image for ubuntu:latest
#启动后,直接可以在 ubuntu 内执行交互命令
gl>root@286039e88e1b:/# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.2 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.2 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
root@286039e88e1b:/# exit
exit
列出运行中的容器
docker ps
[root@localhost docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2953ff3e3772 nginx "nginx -g 'daemon of…" 2 hours ago Up 2 hours 0.0.0.0:11->80/tcp elated_rubin
CONTAINER ID:容器ID
IMAGE:镜像名称
STATUS:状态:Up 运行中,Exited 停止
PORTS:端口设置
NAMES:容器名称,自动生成,也可以通过 docker run 的 —name 指定
docker ps -a
列出所有容器,包括没有运行的。
停止容器
docker stop 2953ff3e3772
其中 2953ff3e3772 指容器ID,也可以是容器名称。
强制停止容器
docker kill 2953ff3e3772
删除容器
docker rm 2953ff3e3772
只能删除已停止的容器,如需删除正在运行的容器,可添加 -f 参数
启动容器
docker start 2953ff3e3772
查看容器信息
docker inspect 2953ff3e3772
查看容器日志
docker container logs 2953ff3e3772
查看容器里的进程
docker top 2953ff3e3772
进入容器
docker container exec -it 2953ff3e3772 /bin/bash
修改端口
#停止容器(docker stop d00254ce3af7)
#停止docker服务(systemctl stop docker)
cd /var/lib/docker/containers/d00254ce3af7*
vi hostconfig.json
"PortBindings":{"8080/tcp":[{"HostIp":"","HostPort":"60000"}]}
#前一个数字是容器端口, 后一个是宿主机端口。将宿主机的60000端口映射到容器的8080端口
#启动docker服务(systemctl start docker)
#启动容器(docker start d00254ce3af7)
导入导出
如果服务器没有网络,不能拉取镜像的话,只能是通过本地上传镜像。
首先将镜像导出。这里以镜像 sqber/onlyoffice 为例
docker save sqber/onlyoffice -o /home/sqberOnlyoffice.tar
-o 是指定导出的目录文件
注意 docker save 后面不用使用镜像Id,否则导入后不显示镜像名字,版本。
然后将 sqberOnlyoffice.tar 上传到服务器。在服务器上加载镜像即可。
docker load -i /home/sqberOnlyoffice.tar
*昵称:
*邮箱:
个人站点:
*想说的话: