如果之前有过安装docker,先卸载之前版本

apt-get remove docker docker-engine docker.io containerd runc

首先,更新现有的软件包列表:

sudo apt update

接下来,安装一些必备软件包,这些apt软件包可以通过HTTPS使用软件包:

sudo apt install apt-transport-https ca-certificates curl software-properties-common

然后将官方Docker存储库的GPG密钥添加到系统中:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

将Docker存储库添加到APT源:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"

接下来,使用新添加的存储库中的Docker软件包更新软件包数据库:

sudo apt update

确保从Docker仓库而不是默认的Ubuntu仓库进行安装:

apt-cache policy docker-ce

注意,docker-ce尚未安装,但候选安装来自Ubuntu 18.04(bionic)的Docker存储库。

最后,安装Docker:

sudo apt install docker-ce

现在应该安装Docker,启动守护程序,并启用该进程以在启动时启动。检查它是否正在运行:

sudo systemctl status docker

将用户加入到docker组,可以避免在执行docker命令时必须加上sudo。退出终端重新连接后生效

sudo usermod -aG docker cloud

要检查是否可以从Docker Hub访问和下载映像,请输入:

docker run hello-world

搜索Ubuntu映像,请输入:

docker search ubuntu

执行以下命令将正式ubuntu映像下载到计算机:

docker pull ubuntu

要查看已下载到计算机的映像,请键入:

docker images

使用-i和-t的组合以交互式运行Ubuntu映像:

docker run -it ubuntu

docker run -d -p 8081:8081 --name nexus3 --restart=always sonatype/nexus3

先解释下这条命令:

-d:表示在docker守护线程运行这个镜像;

-p:表示绑定端口,前面的端口表示宿主机端口,后面的表示容器端口,如果宿主机的8081端口已经被占用了,那么可以改为8082:8081,容器端口8081是nexus3规定的。可以绑定多对端口,-p xx:xx -p xx:xx

--restart=always:这个指定docker重启启动容器,当服务器或者docker进程重启之后,nexus容器会在docker守护进程启动后由docker守护进程启动容器,容器的重启策略很多,大家可以自己去看看对应的资料;

--name :这里是指定了容器建立后的名称;

sonatype/nexus3是镜像名

docker run -d -v mydata:/data xxxx

容器运行时应该尽量保持容器存储层不发生写操作,对于数据库类需要保存动态数据的应用,其数据库文件应该保存于卷(volume)中。在这行命令中,使用了 mydata 这个命名卷挂载到了 /data 这个位置,替代了 Dockerfile 中定义的匿名卷的挂载配置

要查看活动容器,请使用:

docker ps

要启动已停止的容器,使用

docker start [container-id or name]
//example:docker start d9b100f2f636

要停止正在运行的容器,使用

docker stop [container-id or name]
//example:docker stop sharp_volhard

删除容器,使用

docker rm [container-id or name]

使用docker ps -a命令查找容器ID或名称,然后将其删除。

Docker Compose

安装Docker Compose

检查安装版本最新版本,如有必要,在下面的命令中对其进行更新:

sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

然后,通过检查版本来验证安装是否成功:

docker-compose --version
output:docker-compose version 1.25.2, build 698e2846

使用Docker Compose

查看指定命令的帮助文档sudo docker-compose help [build]

构建(重新构建)容器sudo docker-compose build

验证 Compose 文件格式是否正确sudo docker-compose config

强制停止指定服务容器sudo docker-compose kill

查看服务的日志输出sudo docker-compose logs

打印绑定的公共端口sudo docker-compose port

列出所有的容器sudo docker-compose ps

下载服务镜像sudo docker-compose pull

删除容器sudo docker-compose rm

在服务容器上运行命令sudo docker-compose run [container-name] bash

启动已停止的的容器sudo docker-compose start

停止已运行的容器sudo docker-compose stop

构建、创建、重建、启动容器sudo docker-compose up

后台运行容器sudo docker-compose up -d(确保命令执行路径下有.yml文件)

示例:

下载镜像的docker-compose.yml

wget example.yml

创建 volume 持久化 Redis 缓存

sudo docker volume create redis-data

启动

sudo docker-compose up -d

添加配置

修改 docker-compose.yml中的 environment 进行配置,修改后执行sudo docker-compose up -d

删除旧容器

sudo docker-compose down

停止容器并删除由docker-compose up创建的container,network,volume

其他问题

unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

解决

sudo chmod 666 /var/run/docker.sock

维护

自动清理容器

docker system prune -a

某些停止的容器也会被清理掉,谨慎使用

删除已关闭容器

#删除所有关闭的容器

docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm

清理日志

单独列出日志文件大小

ls -lh $(find /var/lib/docker/containers/ -name *-json.log)

清空日志文件

truncate -s 0 /path/to/your/textfile