Docker保姆级级教程【最快入门】

Docker快速入门

1.Docker简介

Docker是一个开源的容器引擎,它可以帮助我们更快地交付应用。Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。使用Docker,可更快地打包、测试以及部署应用程序,并可减少从编写到部署运行代码的周期。
在这里插入图片描述
Docker官方网站:https://www.docker.com/

1.1 Docker版本

1.1.1 Docker(企业版)

Docker EE由公司支持,可在经过认证的操作系统和云提供商中使用,并可运行来自Docker Store的、经过认证的容器和插件。

1.1.2 Docker(免费版)

Docker CE是免费的Docker产品的新名称,Docker CE包含了完整的Docker平台,非常适合开发人员和运维团队构建容器APP

1.2 Docker架构

1.2.1 Docker daemon(Docker守护进程)

Docker daemon是一个运行在宿主机(DOCKER_HOST)的后台进程。我们可通过Docker客户端与之通信。

1.2.2 Client(Docker客户端)

Docker客户端是Docker的用户界面,它可以接受用户命令和配置标识,并与Docker daemon通信。图中,docker build等都是Docker的相关命令。

1.2.3 Images(Docker镜像)

Docker镜像是一个只读模板,它包含创建Docker容器的说明。它和系统安装光盘有点像——我们使用系统安装光盘安装系统,同理,我们使用Docker镜像运行Docker镜像中的程序。

1.2.4 Container(容器)

容器是镜像的可运行实例。镜像和容器的关系有点类似于面向对象中,类和对象的关系。我们可通过Docker API或者CLI命令来启停、移动、删除容器。

1.2.5 Registry(仓库)

Docker Registry是一个集中存储与分发镜像的服务。我们构建完Docker镜像后,就可在当前宿主机上运行。但如果想要在其他机器上运行这个镜像,我们就需要手动拷贝。此时,我们可借助Docker Registry来避免镜像的手动拷贝。
一个Docker Registry可包含多个Docker仓库;每个仓库可包含多个镜像标签;每个标签对应一个Docker镜像。这跟Maven的仓库有点类似,如果把Docker Registry比作Maven仓库的话,那么Docker仓库就可理解为某jar包的路径,而镜像标签则可理解为jar包的版本号。

2.Docker安装启动

2.1 运行安装环境

采用Linux操作系统,版本为:Centos7.0 64位,Docker采用CE版:18.06.0.ce-3

2.2 Docker安装过程

2.2.1 下载Docker-CE rpm安装包

https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

注意下载版本要和操作系统版本对应。

docker-ce-18.06.0.ce-3.el7.x86_64.rpm

2.2.2 安装Docker

上传 docker-ce-18.06.0.ce-3.el7.x86_64.rpm 到opt

执行命令: yum install -y docker-ce-18.06.0.ce-3.el7.x86_64.rpm

注意:确保linux服务器处于联网状态。ping www.baidu.com

常见问题:

当用yum安装时报错。。。
Error: Package: glibc-headers-2.17-196.el7_4.2.x86_64 (ultra-centos-7.4-updates)
           Requires: glibc = 2.17-196.el7_4.2
           Installed: glibc-2.17-222.el7.x86_64 (installed)
               glibc = 2.17-222.el7
           Available: glibc-2.17-196.el7.x86_64 (ultra-centos-7.4-base)
               glibc = 2.17-196.el7
           Available: glibc-2.17-196.el7_4.2.x86_64 (ultra-centos-7.4-updates)
               glibc = 2.17-196.el7_4.2
Error: Package: gcc-4.8.5-16.el7_4.2.x86_64 (ultra-centos-7.4-updates)
           Requires: libgomp = 4.8.5-16.el7_4.2
           Installed: libgomp-4.8.5-28.el7_5.1.x86_64 (installed)
               libgomp = 4.8.2-16.el7_5
               libgomp = 4.8.5-28.el7_5.1
           Available: libgomp-4.8.5-16.el7.x86_64 (ultra-centos-7.4-base)
               libgomp = 4.8.5-16.el7
               libgomp = 4.8.2-16.el7
           Available: libgomp-4.8.5-16.el7_4.1.x86_64 (ultra-centos-7.4-updates)
               libgomp = 4.8.5-16.el7_4.1
               libgomp = 4.8.2-16.el7_4
           Available: libgomp-4.8.5-16.el7_4.2.x86_64 (ultra-centos-7.4-updates)
               libgomp = 4.8.5-16.el7_4.2
               libgomp = 4.8.2-16.el7_4
Error: Package: glibc-devel-2.17-196.el7_4.2.x86_64 (ultra-centos-7.4-updates)
           Requires: glibc = 2.17-196.el7_4.2
           Installed: glibc-2.17-222.el7.x86_64 (installed)
               glibc = 2.17-222.el7
           Available: glibc-2.17-196.el7.x86_64 (ultra-centos-7.4-base)
               glibc = 2.17-196.el7
           Available: glibc-2.17-196.el7_4.2.x86_64 (ultra-centos-7.4-updates)
               glibc = 2.17-196.el7_4.2
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest
解决办法:
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
sed -i  's/$releasever/7/g' /etc/yum.repos.d/CentOS-Base.repo
、yum repolist 
2.2.3 启动与停止Docker

启动docker:systemctl start docker

停止docker:systemctl stop docker

重启docker:systemctl restart docker

查看docker状态:systemctl status docker

把docker服务设置为开机自启动:systemctl enable docker //禁止systemctl disable docker

2.2.4 验证Docker是否安装成功

执行命令:docker info

查看返回信息,能否查看到Docker相关信息

到此,Docker安装完毕!

3.Docker配置镜像加速器

国内访问Docker Hub的速度很不稳定,有时甚至出现连接不上的情况。我们来为Docker配置镜像加速器,从而解决这个问题。目前国内很多云服务商都提供了镜像加速的服务。

常用的镜像加速器有:阿里云加速器DaoCloud加速器等。各厂商镜像加速器的使用方式大致类似,笔者以阿里云加速器为例进行讲解。

注册阿里云账号后,即可在阿里云控制台(https://cr.console.aliyun.com/#/accelerator)看到类似如下的页面。
在这里插入图片描述

3.1 新建编辑: /etc/docker/daemon.json

{

“registry-mirrors”: [“https://ksc53x4t.mirror.aliyuncs.com”]

}

3.2 修改保存后输入如下命令重启Docker守护进程和服务

重启docker守护程序

systemctl daemon-reload

重启docker服务

systemctl restart docker

查看docker容器信息

docker info

查看最后倒数第二行出现如下内容说明配置成功

Registry Mirrors:
 https://j4pan1gm.mirror.aliyuncs.com/

4.docker镜像操作的常用指令

4.1 搜索指令

4.1.1通过镜像仓库搜索

Docker镜像仓库网址:https://hub.docker.com/search?q=&type=image

4.1.2 指令搜索

docker search tomcat //搜索tomcat镜像

4.2 下载镜像

docker pull 镜像名称 //查询最近的版本

docker pull 镜像名称:版本标签

如:

docker pull tomcat

docker pull tomcat:8.5.57-jdk8-openjdk-slim

4.3 查看本地镜像

docker images

4.4 删除镜像

docker rmi tomcat:8.5.57-jdk8-openjdk-slim //通过镜像名:版本号

docker rmi b1a27cee0cec //通过IMAGE ID删除

4.5 保存镜像为文件

docker save -o /root/tomcat.tar tomcat:8.5.57-jdk8-openjdk-slim

// -o /root/tocmat.tar 保存为文件的地址

4.6 把保存的镜像备份文件恢复成镜像

docker load -i /root/tomcat.tar

5.Docker容器操作常用指令

5.1 使用镜像新建一个容器

docker run

  1. 创建并运行一个java容器,打印helloworld!

    docker run java:8 /bin/echo ‘Hello World!’

  2. 创建一个Centos容器

    docker run -ti --name=c1 centos:centos7 /bin/bash

    -i 和容器输入

    -t 交互 后面跟交互shell脚本 /bin/bash

    centos:centos7 镜像名称

  3. 创建一个有网络使用容器

    如:创建一个容器nginx 端口为 80

    docker run -d --name n1 -p 81:80 nginx

    -p 端口映射 宿主机端口:容器端口

    -d 表示守护式容器(用户退出容器后,容器依然可以正常运行)

 --network=host 共享宿主机ip

需要首先设置宿主机hosts文件:

   vi /etc/hosts
   192.168.228.129   localhost
   192.168.228.129   bogon
防火墙操作指令:
   //在防火墙添加放行端口  80
   firewall-cmd --add-port=80/tcp --permanent
   //重新加载防火墙
   firewall-cmd --reload
   
   //查看防火墙的设置规则
   firewall-cmd --list

5.2 列出容器

  1. 列出当前正在运行的容器 docker ps
  2. 列出当前全部容器 docker ps -a
  3. 列出当前容器的所有编号 docker ps -a -q

5.3 停止容器

docker stop 容器的names

docker stop 容器的CONTAINER ID

如:

docker stop c1

docker stop 36bee7ca1cf4

5.4 启动容器

docker start 容器名称或容器编号

docker start n1

5.5 强制停止容器

docker kill 容器名称或容器编号

5.6 重启容器

docker restart 容器名称或者容器编号

5.7 如何进入到容器

docker exec -it c1 /bin/bash

5.8 退出容器

exit

5.9 从宿主机拷贝文件到容器

在宿主机上创建文件并编辑

touch java511.txt

vi java511.txt

拷贝到容器中

docker cp /java511.txt c1:/root/

5.10 从容器拷贝文件到宿主机

docker cp c1:/1.java /root/2.java

5.11 挂载宿主机的指定目录到容器(其中 --privileged 是可选的)

(如果你共享的是多级的目录,可能会出现权限不足的提示。这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题)

docker run -di --name=c2 -v /root/html:/test0722 --privileged=true centos:centos7

// 挂载必须写 -i

5.12 删除容器

docker rm 容器名称或者编号 //注意 不能删除正在运行中容器, 需要停掉才可以删除 -f 强制删除

5.13 查看容器ip

docker inspect n1 //输出的内容较多

docker inspect --format=‘{{.NetworkSettings.IPAddress}}’ n1 //只输出ip

5.14 查看容器日志输出

docker logs n1 查看日志

docker logs --tail=“2” n1 查看日志 最后2行。

5.15、设置容器开机自启动

docker update --restart=always 容器名称 //设置开机自启动

docker update --restart=no 容器名称 //禁止开机自启动

设置docker服务随着服务器启动自动开启
systemctl enable docker

设置docker服务不要随着服务器启动自动开启
systemctl disable docker

6.Java开发者Docker常用镜像容器创建

6.1 JDK部署

6.1.1 拉取JDK镜像
执行命令: docker pull java:8

执行命令: docker pull openjdk:8

6.1.2 创建JDK容器
执行命令:docker run -di --name jdk1  java:8

说明:jdk安装的是openjdk,具体安装路径是:/usr/lib/jvm/java-1.8.0-openjdk-amd64

6.1.3 进入容器验证Java环境

docker exec -it jdk1 /bin/bash

java -version

6.2 MySQL部署

6.2.1拉取MySQL镜像
执行命令:docker pull mysql:5.7

6.2.2 创建MySQL容器

第一种创建容器MySQL容器的方式

docker run -d --name=offcn_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=scwdb  mysql:5.7 

-p 代表端口映射,格式为 宿主机映射端口:容器运行端口

-e MYSQL_ROOT_PASSWORD=123456 //表示设置root的密码为123456

-e MYSQL_DATABASE=scwdb //创建mysql数据库容器的同时初始化创建一个数据库 scwdb

//开启mysql容器
docker exec -it offcn_mysql /bin/bash
//登录mysql
mysql -u root -p
//赋外网访问权限
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
//刷新权限
flush privileges;

如上创建需要解决中文乱码问题乱码(默认是latin1)

show variables like ‘character_set_%’;

乱码解决方案:

a. 进入offcn_mysql容器  修改配置文件/etc/mysql/mysql.conf.d/mysqld.cnf

注意 因为offcn_mysql容器中不能使用vi命令,所以我们将文件拷贝到宿主机后修改后在拷贝回去

b. docker cp offcn_mysql:/etc/mysql/mysql.conf.d/mysqld.cnf /root/

    vi  mysqld.cnf

   找到[mysqld]   在其下添加编码处理

   character-set-server=utf8
   collation-server=utf8_general_ci
   
   保存

c.  docker cp /root/mysqld.cnf  offcn_mysql:/etc/mysql/mysql.conf.d/mysqld.cnf

d.  重启容器  docker restart offcn_mysql

第二种创建容器MySQL容器的方式

创新容器同时创建表的时候,解决中文问题(使用挂载的方式,将刚刚解决乱码的mysqld.cnf 挂载下容器中相应的位置)

docker run -d --name=offcn_mysql -p 33306:3306  -v /root/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf  -e MYSQL_ROOT_PASSWORD=123456 -eMYSQL_DATABASE=dongyimaidb  mysql:5.7

第三种创建容器MySQL容器的方式

在创建mysql容器时候,执行初始化数据库脚本 (将scwdb 数据库导出, 其中不要勾选 添加创建数据库语句 ,然后上传到 宿主机root目录)

docker-entrypoint-initdb.d:放在该目下sql脚本,是容器可以识别并自动运行目录,

docker run -d --name=offcn_mysql -p 3306:3306  -v /root/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf  -v /root/scwdb.sql:/docker-entrypoint-initdb.d/mysql.sql -e MYSQL_ROOT_PASSWORD=123456 -eMYSQL_DATABASE=dongyimaidb  mysql:5.7 

//开启mysql容器

docker exec -it offcn_mysql /bin/bash

//登录mysql

mysql -u root -p

//赋外网访问权限

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

//刷新权限

flush privileges;

尝试直接设置服务器编码:

docker run -d --name=offcn_mysql -v /root/scwdb.sql:/docker-entrypoint-initdb.d/mysql.sql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=dongyimaidb  mysql:5.7 --character-set-server=utf8 --collation-server=utf8_unicode_ci

6.2.3 连接MySQL容器数据库

远程连接mysql数据库只需要使用宿主机ip和端口33306就可以

6.3 Redis 部署

6.3.1 拉取Redis镜像
执行命令:docker pull redis:4.0.8

6.3.2 创建Redis容器
执行命令: docker run -di --name redis -p 6379:6379  redis:4.0.8

7.Dockerfile入门(了解)

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像(centos或者ubuntu,即操作系统级别的镜像)并最终创建一个新的镜像。

  • 对于开发人员:可以为开发团队提供一个完全一致的开发环境;
  • 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;
  • 对于运维人员:在部署时,可以实现应用的无缝移植。

7.1 Dockerfile常用命令

7.2 自主创建jdk镜像

(1) 创建一个目录: mkdir /usr/local/dockerjdk

(2) 上传 jdk-8u131-linux-x64.tar.gz到 /usr/local/dockerjdk/

(3) 创建一个 Dockerfile 文件 并编辑 vi Dockerfile 内容如下

FROM centos:centos7

MAINTAINER ujiuye

RUN mkdir /usr/local/java

ADD jdk-8u131-linux-x64.tar.gz  /usr/local/java/

ENV JAVA_HOME /usr/local/java/jdk1.8.0_131

ENV CLASSPATH $JAVA_HOME/lib

ENV PATH $JAVA_HOME/bin:$PATH

保存文件

(4) 创建镜像 为jdk1.8

docker build -t=‘jdk:1.8’ /usr/local/dockerjdk/

(5) 查看已经创建的镜像

docker images

(6) 使用自定义的镜像创建一个容器

docker run -di --name=java1 jdk:1.8

(7) 查看创建的容器

docker ps

(8) 验证自定义容器jdk环境是否正常

docker exec -it java1 /bin/bash

java -version

7.3 自主创建一个Eureka镜像

(1) 创建目录 mkdir /usr/local/dockereureka

(2) 上传eureka.jar 到文件中

(3) 创建Dockerfile vi Dockerfile 内容如下

#把宿主机jar拷贝到容器
ADD eureka.jar  eureka.jar

#暴露端口号
EXPOSE 8888

#当容器启动时候我们运行jar

ENTRYPOINT ["java", "-jar", "eureka.jar"]

(4)创建镜像 docker build -t=‘eureka:1.0’ .

(5)查看镜像 docker images

(6)创建容器 docker run -di -name=e1 -p 8888:8888 eureka:1.0

(7)查看容器 docker ps

(8)访问: http://192.168.228.129:8888

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
什么是Docker Docker 最初是dotCloud 公司创始人Solomon Hykes 在法国期间发起的一个公司内部项目, 它是基于dotCloud 公司多年云服务技术的一次革新,并于2013 年3 月以Apache 2.0 授权 协议开源,主要项目代码在GitHub 上进行维护。Docker 项目后来还加入了Linux 基金会, 并成立推动开放容器联盟(OCI)。 Docker 自开源后受到广泛的关注和讨论,至今其GitHub 项目已经超过4 万6 千个星标和一 万多个fork。甚至由于Docker 项目的火爆,在2013 年底,dotCloud 公司决定改名为 DockerDocker 最初是在Ubuntu 12.04 上开发实现的;Red Hat 则从RHEL 6.5 开始对 Docker 进行支持;Google 也在其PaaS 产品中广泛应用DockerDocker 使用Google 公司推出的Go 语言进行开发实现,基于Linux 内核的 cgroup,namespace,以及AUFS 类的Union FS 等技术,对进程进行封装隔离,属于操作 系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容 器。最初实现是基于LXC,从0.7 版本以后开始去除LXC,转而使用自行开发的 libcontainer,从1.11 开始,则进一步演进为使用runC 和containerd。 Docker容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极 大的简化了容器的创建和维护。使得Docker 技术比虚拟机技术更为轻便、快捷。 下面的图片比较了Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件 后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程 直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比 传统虚拟机更为轻便。
好的,请按照以下步骤进行凝思6.0的安装部署docker: 1. 准备工作 - 安装dockerdocker-compose。 - 下载凝思6.0的安装包。 2. 创建并进入项目目录 在命令行中创建一个项目目录,并进入该目录: ``` mkdir myproject cd myproject ``` 3. 复制安装包 复制凝思6.0的安装包到项目目录中: ``` cp /path/to/ningxi-6.0.tar.gz . ``` 4. 解压安装包 解压凝思6.0的安装包: ``` tar zxvf ningxi-6.0.tar.gz ``` 5. 编写docker-compose.yml文件 在项目目录中创建一个名为docker-compose.yml的文件,并将以下内容复制到文件中: ``` version: '3.7' services: ningxi: image: registry.cn-hangzhou.aliyuncs.com/ningxi/ningxi:6.0 container_name: ningxi restart: always ports: - "8080:8080" environment: - LC_ALL=C.UTF-8 - TZ=Asia/Shanghai - SPRING_PROFILES_ACTIVE=prod - SERVER_PORT=8080 volumes: - ./data:/usr/local/src/ningxi/data - ./logs:/usr/local/src/ningxi/logs ``` 6. 启动容器 在命令行中执行以下命令启动容器: ``` docker-compose up -d ``` 7. 测试容器 容器启动后,可以通过访问http://localhost:8080/来测试容器是否正常运行。 8. 配置nginx反向代理 如果需要通过域名来访问凝思6.0,则需要配置nginx反向代理。以下是一个示例配置文件: ``` server { listen 80; server_name ningxi.example.com; # 修改为你的域名 location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ``` 9. 完成 至此,凝思6.0的安装部署docker就完成了。可以通过nginx反向代理来访问容器

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值