DOCKER
Docker是一个开源的应用容器引擎,一个轻量级容器技术。它支持将软件编译成一个镜像,然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像。
docker中常见的概念有:
dokcer的使用步骤:
这里以centos为例进行说明如何安装docker:
首先使用uname -r
命令查看内核版本,确保是3.10及以上
[root@izbp15ffbqqbe97j9dcf5dz ~]# uname -r
3.10.0-514.26.2.el7.x86_64
安装docker所需的依赖环境
[root@izbp15ffbqqbe97j9dcf5dz ~]#yum -y install yum-utils device-mapper-persistent-data lvm2
修改镜像源为国内的阿里镜像源,便于加速后续镜像的拉取
[root@izbp15ffbqqbe97j9dcf5dz ~]#yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
使用yum install docker
命令安装docker
[root@izbp15ffbqqbe97j9dcf5dz ~]# yum install docker
Loaded plugins: fastestmirror, product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
Loading mirror speeds from cached hostfile
Package 2:docker-1.13.1-161.git64e9980.el7_8.x86_64 already installed and latest version
Nothing to do
使用systemctl start docker
命令启动docker
[root@izbp15ffbqqbe97j9dcf5dz ~]# systemctl start docker
[root@izbp15ffbqqbe97j9dcf5dz ~]# docker -v
Docker version 1.13.1, build 64e9980/1.13.1
使用命令systemctl enable docker
设置docker为开机自启
[root@izbp15ffbqqbe97j9dcf5dz ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
测试docker是否正常运行:运行docker run hello-world
命令
[root@iZbp15ffbqqbe97j9dcf5dZ ~]# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:49a1c8800c94df04e9658809b006fd8a686cab8028d33cfba2cc049724254202
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.
(amd64)
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
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
如果要停止docker运行,可以使用systemctl stop docker
拉取docker镜像时,通常有如下的几种选择:
Docker官方的中央仓库:像最全的,但是下载速度较慢
国内的镜像网站:daoCloud
采用私服的方式拉取镜像(添加配置):需要创建 /etc/docker/daemon.json,并添加如下内容
{
"registry-mirrors":["https://registry.docker-cn.com"],
"insecure-registries":["ip:port"]
}
#重启两个服务
systemctl daemon-reload
systemctl restart docker
操作 | 命令 | 说明 |
---|---|---|
检索 | docker search 关键字 eg:docker |
在docker hub上检索所需的软件的镜像信息 |
拉取 | docker pull 镜像名:tag |
:tag可选,默认为latest,即最新版本 |
查询列表 | docker images |
查看所有本地镜像 |
删除 | docker rmi image-id |
删除指定的本地镜像 |
其中镜像拉取可以直接使用想要拉取的镜像名,此时默认拉取的是最新版;或者到仓库中查询所需的镜像版本,然后再进行拉取。
另外有关镜像的导入和导出的命令有:
命令 | 描述 |
---|---|
导出镜像 | docker save -o 导出的路径 镜像id |
导入本地镜像 | docker load -i 镜像文件 |
修改镜像文件 | docker tag 镜像id 新镜像名称:版本 |
拉取完想要的镜像后,需要启动容器来进行使用。容器常用的有关操作如下:
操作 | 命令 | 说明 |
---|---|---|
根据镜像启动容器 | docker run ‐‐name mytomcat ‐d tomcat:latest |
|
查看运行中的容器 | docker ps |
|
停止运行中的容器 | docker stop 容器id |
|
停止所有的容器 | docker stop $(docker ps -qa) |
|
启动容器 | docker start 容器id |
|
重启容器 | docker restart 容器id |
|
删除一个容器 | docker rm 容器id |
|
删除全部容器 | docker rm $(docker ps -qa) |
|
启动一个做了端口映射的容器 | docker run ‐d ‐p 8888:8080 tomcat |
-d:后台运行;-p: 将主机的端口映射到容器的一个端口 |
查看容器的日志 | docker logs container‐name/container‐id |
示例:
其中操作命令中所需的容器id不需要填写完整,只需要让docker可以区分此时要操作的是哪一个容器即可。
安装:docker pull mysql
[root@izbp15ffbqqbe97j9dcf5dz ~]# docker pull mysql
Using default tag: latest
Trying to pull repository docker.io/library/mysql ...
latest: Pulling from docker.io/library/mysql
8559a31e96f4: Pull complete
d51ce1c2e575: Pull complete
c2344adc4858: Pull complete
fcf3ceff18fc: Pull complete
16da0c38dc5b: Pull complete
b905d1797e97: Pull complete
4b50d1c6b05c: Pull complete
c75914a65ca2: Pull complete
1ae8042bdd09: Pull complete
453ac13c00a3: Pull complete
9e680cd72f08: Pull complete
a6b5dc864b6c: Pull complete
Digest: sha256:8b7b328a7ff6de46ef96bcf83af048cb00a1c86282bfca0cb119c84568b4caf6
Status: Downloaded newer image for docker.io/mysql:latest
端口映射:docker run ‐p 3306:3306 ‐‐name mysql01 ‐e MYSQL_ROOT_PASSWORD=123456 ‐d mysql
使用mysql
使用docker run ‐‐name some‐mysql ‐e MYSQL_ROOT_PASSWORD=my‐secret‐pw ‐d mysql:tag ‐‐character‐setserver=utf8mb4 ‐‐collation‐server=utf8mb4_unicode_ci
可以指定mysql的一些配置参数
客户端远程连接docker容器中的mysql 报1251错误,解决方案如下
- 进入容器:
docker exec -it 容器id bash
- 进入mysql:
mysql -uroot -p
- 对远程连接进行授权:
GRANT ALL ON *.* TO 'root'@'%';
- 更改密码的加密规则:
ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
- 更改root密码:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
- 刷新权限:FLUSH PRIVILEGES;`
除了进行数据库的相关设置外,还需要配置服务器的安全规则。点击云控制平台左侧的网络与安全 --> 安全—> 配置规则。
然后按照以下方式手动添加安全规则
配置数据库连接的端口号、用户名和密码
连接成功
数据卷(volume)用于宿主机的一个目录映射到容器中的一个指定的目录中,这样当宿主机操作目录中的内容,那么容器中映射的文件也会随之改变。数据卷常用的命令有:
操作 | 命令 |
---|---|
创建数据卷 | docker volume create 数据卷名称 |
查看所有的数据卷 | docker volume ls |
查看数据卷详情 | docker volume inspect 数据卷名称 |
删除数据卷 | docker volume rm 数据卷名称 |
容器映射数据卷 | docker run -d -p 8080:8080 --name tomcat -v 数据卷名称:容器内部的路径 镜像id |
docker run -d -p 8080:8080 --name tomcat -v 路径(/root/自己创建的文件夹):容器内部的路径 镜像id |
自定义镜像需要创建对应的Dockerfile文件,文件中常用的命令有:
编写好Dockerfile文件后,使用命令docker build -t 镜像名[:tag] ./
来生成镜像。
例如,此时目录下放入了Spring Boot项目的jar包blog.jar,编写的Dockerfile文件内容如下所示:
FROM daocloud.io/library/tomcat:8.5.15-jre8
RUN mkdir /opt/app
COPY blog.jar /opt/app/
EXPOSE 8080
CMD ["java", "-jar", "/opt/app/blog.jar"]
执行命令生成镜像。通过docker images
,命令可以看到,自定义的镜像已经在docker的镜像列表中。
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
官方文档中提供了一种安装方式,但是国内因为网络问题大概率安装不成功。
前面都是使用docker run ...
来启动容器运行镜像,另外更好的一种方式是使用docker-compose。首先需下载docker-compose的压缩包,下载地址:link。下载成功后将其上传到服务器上,并赋予执行权限。另外为了后续操作的方便,这里将其重命名为docker-compose
mv docker-compose-Linux-x86_64 docker-compose
chmod 777 docker-compose
将docker-compse文件移动到/usr/local/bin
目录下,并在/etc/profile
中配置环境变量,这样就可以在任意目录下使用docker-compose命令。
mv docker-compose /usr/local/bin
vi /etc/profile
#添加内容:export PATH=$JAVA_HOME:/usr/local/bin:$PATH
source /etc/profile
执行docker-compose命令,如果看到如下界面,表示安装成功。
下面我们使用docker-compose的方式来安装Mysql。首先,需要编写一个docker-compose.yml文件,文件内容如下:
version: '3.1'
services:
mysql: # 服务的名称
restart: always # 代表只要docker启动,那么这个容器就跟着一起启动
image: daocloud.io/library/mysql:8.0.2 # 指定镜像路径
container_name: mysql # 指定容器名称
ports:
- 3306:3306 # 指定端口号的映射
environment:
MYSQL_ROOT_PASSWORD: 123456 # 指定MySQL的ROOT用户登录密码
TZ: Asia/Shanghai # 指定时区
volumes:
- /opt/docker_mysql/mysql_data:/var/lib/mysql # 映射数据卷
然后使用docker-compose up -d
命令启动容器
操作 | 命令 |
---|---|
启动容器 | docker-compose up -d |
关闭并删除容器 | docker-compose down |
开启docker-compose维护的容器 | docker-compose start |
关闭docker-compose维护的容器 | docker-compose stop |
重启docker-compose维护的容器 | docker-compose restart |
查看docker-compose维护的容器 | docker-compose ps |
查看日志 | docker-compose logs -f |
Docker教程
Docker-2020最新超详细版教程通俗易懂
2020 Docker视频教程