【Ubuntu安装Docker】

【Ubuntu安装Docker】

Turbo 460 2022-10-02

Ubuntu安装docker

前言

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker使用客户端-服务器(c/s)架构模式,使用远程API来管理和创建Docker容器。Docker容器通过Docker镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。

Docker 面向对象
容器 对象
镜像

Docker采用c/s架构Docker daemon作为服务端接受来自客户端的请求,并处理这些请求(创建、运行、并发容器)。客户端和服务端既可以运行在一个机器上,也可以通过socket或者ReSTfulAPI来进行通信。
Docker daemon一般在宿主主机后台运行,等待接收来自客户端的消息。Docker客户端则为用户提供一系列可执行命令,用户用这些命令实现跟Docker daemon交互。

一、卸载旧版本

Docker的旧版本被称为docker, docker.io或docker-engine。如果已安装,请卸载。

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

二、安装

1.1 更新apt包索引

sudo apt-get update

1.2 安装最新版的Docker Engine-Community和containerd

sudo apt-get install docker-ce docker-ce-cli containerd.io

若要安装特定版本的Docker Engine-Community,请在仓库中列出可用版本,然后选择一种安装。

apt-cache madison docker-ce

使用第二列中的版本字符串安装特定版本

sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> container.io

测试Docker是否安装成功

sudo docker run hello-word

Unbale to find image 'hello-world:latest' locally
latest:Pulling from library/hello-world
1b930d010525:Puss comlete
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub. 
3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
docker run -it ubuntu bash
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common && curl -fsSL https://download.docker.com/linux/buuntu/gpg | sudo apt-key add - && sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" && sudo apt-get update && sudo apt-get install -y docker-ce

三、启动与停止

3.1 启动docker

sudo service docker start

3.2 停止docker

sudo service docker stop

3.3 重启docker

sudo service docker restart

四、配置镜像加速器

针对Docker客户端版本大于1.10.0的用户,通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

sudo mkdir -p /etc/docker && sudo tee /etc/docker/daemon.json <<- 'EOF'

{
    "registry-mirrors": ["https://epsax6ut.mirror.aliyuncs.com"],
    "log-driver": "json-file",
    "log-opts": {"max-size": "10m", "max-file": "3"}
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

五、安装常用软件

5.1 安装MySQL

# 编写my.cnf配置文件
vim /root/docker/mysql/conf/my.cnf
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
# 允许最大连接数
max_connections=200
# 允许链接失败的次数
max_connect-errors=10
# 服务器使用的字符集默认为utf8mb4
character-set-server=utf8mb4
collation-server=utf8mb4_unicode-ci
skip-name-resolve

# 运行容器
docker run --name mysql5.7.36 --restart=always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /root/docker/mysql/conf:/etc/mysql/confi.d -v /root/docker/mysql/data:/var/lib/mysql -v root/docker/mysql/log:/var/log/mysql -d mysql:8.0

5.2 安装MongoDB

docker pull mongo:5.0.5 && docker run -d --name mongo5.0.5 --restart=always -p 2701:2701 -e MONGO_INITDB_ROOT_USERNAME=用户名 -e MONGO_INITDB_ROOT_PASSWORD=密码 mongo:5.0.5

5.3 安装Redis

docker pull redis:6.2.6-alpine
mkdir /root/docker/redis
vim /root/docker/redis/redis.conf
port 6379
requirepass xxx
appendonly yes
docker run -p 6379:6379 --name redis6.2.6 --restart=always -v /root/docker/redis/data:/data -v /root/docker/redis/redis.conf:/etc/redis/redis.conf -d redis:6.2.6-alpine redis-server /etc/redis/redis.conf

5.4 安装Nginx

mkdir /root/docker/nginx
mkdir /root/docker/nginx/conf
# 由于我们现在没有配置文件,也不知道配置什么,可以先启动一个nginx,将其配置拷贝出来
# 再作映射,启动真正的nginx
docker pull nginx:1.17.4
docker run --name some-nginx -d nginx:1.17.4
docker container cp some-nginx:/etc/nginx /root/docker/nginx/conf
# 然后删除这个容器
docker docekr rm -f some-nginx

# 启动nginx
docker run --name nginx -p 80:80 -v /root/docker/nginx/conf:/etc/nginx -v /root/docker/nginx/html:/usr/share/nginx/html -d nginx:1.17.4

六、Docker常用命令

6.1 查看镜像列表

sudo docker images

6.2 镜像搜索

sudo docker search unbuntu

6.3 下拉镜像

sudo docker pull 镜像名称
sudo docker pull 镜像名:Tag

6.4 删除镜像

sudo docker rmi -f 镜像名称/镜像ID

6.5 保存镜像

将需要的镜像保存为tar压缩文件,方便镜像转移和保存,然后可以在任何一台安装了docker的服务器上加载这个镜像

dockers save 镜像名称/镜像ID -o 镜像保存在哪个位置与名字

6.6 加载镜像

任何安装docker的地方加载镜像保存文件,使其恢复为一个镜像

docker load -i 镜像保存文件位置

6.7 查看容器列表

sudo docker ps

6.8 查看所有容器列表

包含正在运行和已停止的

sudo docker ps -a

6.9 创建容器

docker run -it -d --name 别名 -p 宿主机端口:容器端口 -v 宿主机文件存储位置:容器内文件位置 镜像名:Tag /bin/bash

参数含义:

  • -it表示与容器进行交互式启动
  • -d表示可后台运行容器
  • –name 给要运行的容器起的名字
  • /bin/bash 交互路径
  • -p将容器的端口映射到宿主机上,通过宿主机访问内部端口
  • -v将容器内的指定文件夹挂在到宿主机对应位置

6.10 停止容器

sudo docker stop 容器名/容器ID

6.11 删除容器

# 删除一个容器
docker rm -f 容器名称/容器ID
# 删除多个容器 空格隔开要删除的容器名或容器ID
docker rm -f 容器名/容器ID 容器名/容器ID 
# 删除全部容器
docker rm -f $(docker ps -aq)

6.12 进入容器

sudo docker attach 容器ID/容器名称

完结