Docker的安装与配置使用

一、安装docker

1、安装依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2

2、设置docker安装源
有国外的和阿里云两个可以选(二选一), 因为国外的比较慢,可以选国内的阿里云镜像源
国外镜像源:

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 
yum makecache fast

阿里云镜像源:

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum makecache fast

3、安装社区版Docker-CE

yum install -y docker-ce

4、启动docker
设置开机启动:

systemctl enable docker

启动docker

systemctl start docker

测试是否成功
docker有一个测试用的hello world镜像

docker run hello-world

在这里插入图片描述
5、配置镜像加速器
国内下载较慢,可以配置镜像加速器,如果没开通过这个服务需要创建一个镜像,按照提示操作即可。
在这里插入图片描述
在这里插入图片描述
直接在虚拟机中运行阿里云控制台中提示的命令即可。

6、拉取镜像
从daocloud上拉取镜像https://hub.daocloud.io/
注册账号,登陆搜索镜像
在这里插入图片描述
选择版本后拉取:
在这里插入图片描述

二、docker镜像

输入docker 能看到提示的命令:
在这里插入图片描述

1、搜索镜像

搜索帮助

docker search --help

在这里插入图片描述
查看docker镜像

docker images

在这里插入图片描述
现在本机没有镜像,可以下载镜像。可以进行搜索

docker search 关键字 --limit 条数

比如找nginx镜像
在这里插入图片描述

3、安装镜像

拉取java镜像,如果不写版本号就默认下载最新版本

docker pull 镜像版本

版本可以去官网查看https://hub.docker.com/
在这里插入图片描述
安装镜像
在这里插入图片描述
如果一个镜像的名不能直接说明它的信息,可以通过命令修改tag:

docker tag IMAGEID 新镜名称:新标签

在这里插入图片描述

3、删除镜像

删除之前要保证镜像没有被任何容器使用,如果有容器需要先删除容器

docker rmi 镜像名:版本
docker rmi nginx:latest

在这里插入图片描述

4、备份镜像

再安装一个nginx镜像

docker pull nginx

在这里插入图片描述
备份本地镜像仓库

docker save -o nginx.img.tar nginx

在这里插入图片描述

5、导入镜像
docker load -i nginx.img.tar

在这里插入图片描述

三、docker容器

1、启动容器
docker run 参数 镜像名称:tag 

运行一个容器时,若只是指定了镜像名,而没有指定其tag,docker默认会以tag为latest(最新版本)的镜像去启动容器,假如本地不存在这个镜像则先会报错;之后会尝试下载这个镜像,下载成功后再次运行容器和所要执行的命令。
在这里插入图片描述
后台启动容器

docker run -itd 镜像:版本

或者

docker run -itd 镜像id 

-itd运行一个在后台执行的容器,同时,还能用控制台管理

2、停止容器
docker stop 容器id

在这里插入图片描述
docker ps -a:可以列出所有容器,包括未运行的容器
docker rm 容器id:删除容器
docker start 容器id:启动一个容器
docker restart 容器id :重新启动一个容器

3、端口映射

映射端口,docker的网络和宿主机网络不在一个网段,不能直接访问,需要进行端口映射

docker run -itd -p 宿主机端口:docker端口 镜像id 

如:新建容器启动nginx

docker run -itd -p 80:80 2622e6cca7eb

在这里插入图片描述
停止nginx服务

docker stop 1da4608e1cc9

在这里插入图片描述

4、容器命名

docker容器在启动的时候有个名字随机的名字,名字是唯一的,用于区分容器.通过容器的name也可以操作容器,作用和容器id是一样的。可以自己指定容器的名字:

docker run -itd --name 新名字

如端口映射启动nginx并指定容器名称

docker run -itd --name nginx1 -p 80:80 2622e6cca7eb

在这里插入图片描述
通过容器名停止容器

docker stop nginx1

重命名容器

docker rename 原名字 新名字
5、其它命令

查看本地所有容器(包括未运行的):

 docker ps -a

查看最近一次启动的容器(不论现在是启动还是停止):

docker ps -l

查看正在运行的容器id

docker ps -q

查看所有容器id

docker ps -aq

查看容器的元数据信息,有启动时执行的命令或程序、运行时的IP、所使
用的镜像等:

docker inspect <容器ID|容器名>

查看容器ip:

docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器id

删除容器

docker rm 容器id

在宿主机直接运行容器中的命令

docker exec 容器名/容器 ID(不是镜像名/镜像ID) 执行的命令 [参数]

如:

docker exec amazing_elion cat /etc/redhat-release

查看日志

docker logs 容器id|容器名

可以通过使用docker logs命令来查看容器的运行日志
--tail:选项可以指定查看最后几条日志
-t:选项则可以对日志条目附加时间戳。
--until:显示在某个时间戳(例如:2018-05-25T 13:23:37)之前的日 志,还可以相对时间(例如:42m 42 minutes )

在宿主机和容器之间传递文件:

docker cp [OPTIONS] CONTAINER:PATH LOCALPATH docker cp [OPTIONS] LOCALPATH|- CONTAINER:PATH

将容器中的centos7.4:/root/a.txt 复制到宿主机当前路径.(最后那个.是宿主机当前路径)

docker cp centos7.4:/root/a.txt .

把宿主机当前路径下的a.txt传回容器:

docker cp ./a.txt centos7.4:/root/a.txt

在宿主机查看容器的变化:

docker diw 容器id
[root@localhost ~]# docker diff 78d A /change_dir A /change_dir/file.txt C /root A /root/.bash_history A /test 

A 表示在原来的基础上,做了添加
C 表示在原来的基础上,做了改变

四、数据卷

如果删除容器,那么容器中的东西就都删除了。我们可以把文件存在宿主机,这样删掉容器之后,文件还在宿主机上。数据卷可以在多个容器之间共享。并且直接在容器中修改文件,如果文件错误,会造成容器无法启动,宿主机不能进入未启动的容器,也就不能再修正错误的文件了,这个容器就废掉了。如果文件挂载到外部,可以直接在宿主机修改。

以mysql镜像为例

docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7.24

-v 宿主机目录:镜像目录 是把镜像中对应的文件挂载宿主机目录中
-e 容器启动时的参数
-d 镜像,如果本地没有,则会自动拉取镜像
在这里插入图片描述
docker stop mysql 停止容器,此时不能再连接到数据库了
在这里插入图片描述
在这里插入图片描述
docker rm mysql 删除容器
再用上面相同的方式开启一个容器,再次连接数据库,可以看到数据都在。
 

五、自定义镜像

容器是一个静态环境,镜像中它是什么样子,运行起来就是什么样,是不能改变的。如果想在容器中运行写好的项目,需要把项目打包发布出去。
这时需要自定义镜像。
自定义镜像,使用Dockerfile,注意没有后缀名
例如有一个打好的包,boot.jar,上传到宿主机的/usr/local/docker下放的是一个springboot的jar包,运行的时候会返回文字(代码不重要,写什么都可以)

package com.boot.test;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {
    @RequestMapping("index")
    public String index(){
        return "hello Docker";
    }
}

如果在服务器直接运行 是java -jar boot.jar
如果想在容器中运行,需要创建Dockerfile

vim Dockerfile

内容

FROM java
COPY boot.jar /
CMD java -jar /boot.jar
FROM 镜像名
COPY 宿主机文件 镜像位置
CMD 在镜像中需要执行的命令

使用java镜像
复制boot.jar到docker的根目录下
执行cmd运行jar包

注意复制的文件和Dockerfile在一个目录下面,不能写宿主机绝对路径,否则会报错

构建镜像 -t代表target,testdocker是自定义的镜像名,最后的.代表当前路径

docker build -t testdocker .

在这里插入图片描述
启动镜像

docker run -itd -p 8080:8080 d1d5bed4d8ea

在这里插入图片描述
访问对应的端口和请求路径就能看到结果
在这里插入图片描述
查看日志
docker logs 容器id
可以查看启动过程,和本机运行的控制台是一样的
在这里插入图片描述

六、发布镜像

先登录docker hub,如果没账号的话,可以先注册一个
在这里插入图片描述
创建自己的镜像
在这里插入图片描述
创建完之后会有个路径,一般是 用户名/仓库名

docker push 路径

需要注意的是本地的仓库需要带着路径,如果本地镜像叫aa,你的用户名叫user,那么路径就是user/aa
本地原来叫aa,需要重命名成user/aa,否则会报错
在这里插入图片描述
重命名:

docker tag 镜像id 用户名/镜像名:版本

把Dockerfile 推送到docker hub
在这里插入图片描述

七、docker compose

docker compose负责快速部署分布式
安装命令:

sudo curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
curl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

最后一步如果下载不下来,就换一个地址:

git clone https://github.com/creationix/nvm.git ~/.nvm && cd ~/.nvm && git checkout git describe --abbrev=0 --tags

卸载

sudo rm /usr/local/bin/docker-compose

常用命令
前台运行:docker-compose up
后台运行:docker-compose up -d
启动:docker-compose start
停止:docker-compose stop
停止并移除容器:docker-compose down

默认的模板文件名称为:docker-compose.yml ,格式为 YAML 格式。、

version: "3"
services:
 webapp:
  image: examples/web
   ports:
   - "80:80"
	volumes:
	- "/data"

version 是语言版本
service 是服务
webapp是服务名,名字可以自定义
image 是使用的镜像
ports 是端口映射
volumes 是数据卷

安装tomcat

例如,使用docker-compose安装tomcat
创建docker-compose.yml文件

version: '3.1'
services:
  tomcat:
    restart: always
    image: daocloud.io/library/tomcat:8.5-jre8-slim
    container_name: tomcat
    ports:
      - 8080:8080
    volumes:
      - /usr/local/docker/tomcat/webapps/test:/usr/local/tomcat/webapps/test
    environment:
      TZ: Asia/Shanghai

保存之后运行命令,如果本地没有镜像会下载

docker-compose up -d

在这里插入图片描述
在这里插入图片描述
访问宿主机的8080端口可以看到tomcat界面
在这里插入图片描述

安装mysql

安装mysql5.7.24

version: '3.1'
services:
  mysql:
    restart: always
    image: mysql:5.7.24
    container_name: mysql
    ports:
      - 3306:3306
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --max_allowed_packet=128M
      --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
    volumes:
      - mysql-data:/var/lib/mysql

volumes:
  mysql-data:

在这里插入图片描述
安装mysql8

version: '3.1'
services:
  db:
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    ports:
      - 3306:3306
    volumes:
      - ./data:/var/lib/mysql

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

如果想同时安装mysql和tomcat,可以写到一个docker-compose.yml中

version: '4.1'
services:
  tomcat:
    restart: always
    image: daocloud.io/library/tomcat:8.5-jre8-slim
    container_name: tomcat
    ports:
      - 8080:8080
    volumes:
      - /usr/local/docker/tomcat/webapps/test:/usr/local/tomcat/webapps/test
    environment:
      TZ: Asia/Shanghai
  mysql:
    restart: always
    image: mysql:5.7.24
    container_name: mysql
    ports:
      - 3306:3306
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --max_allowed_packet=128M
      --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
    volumes:
      - mysql-data:/var/lib/mysql

 

八、使用docker安装gitlab

使用Docker来安装和运行Gitlab中文版,由于新版本问题较多,这里使用目前相对稳定的10.5版本,docker-compose .yml配如下:

version: '3'
services: 
  web:
    image: 'twang2218/gitlab-ce-zh:10.5'
    restart: always
    hostname: '121.196.62.166'
    environment:
      TZ: 'Asia/Shanghai'
      GITLAB_OMNIBUS_CONFIG: |
        external_url  'http://121.196.62.166:8080'
        gitlab_rails['gitlab_shell_ssh_port'] = 2222
        unicorn['port'] = 8888
        nginx['listen_port'] = 8080
    ports: 
      - '8080:8080'
      - '8443:443'
      - '2222:22'
    volumes:
      - /usr/local/docker/gitlab/config:/etc/gitlab
      - /usr/local/docker/gitlab/data:/var/opt/gitlab
      - /usr/local/docker/gitlab/logs:/var/log/gitlab

这里云服务器是2g内存带不动,gitlab耗内存,3g内存可以打开
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章