Docker 简介与shell操作使用 -

https://www.cnblogs.com/frankdeng/p/9275092.html

一.Docker概述

1.Docker简介

       Docker是一个开源的应用容器引擎;是一个轻量级容器技术;Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使  用这个镜像;运行中的这个镜像称为容器,容器启动是非常快速的。

对比传统虚拟机总结

 

2.Docker术语

  • docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上);
  • docker客户端(Client):连接docker主机进行操作; docker仓库(Registry):用来保存各种打包好的软件镜像;
  • docker镜像(Images):软件打包好的镜像;放在docker仓库中;
  • docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用。

使用Docker的步骤:

1)、安装Docker

2)、去Docker仓库找到这个软件对应的镜像;

3)、使用Docker运行这个镜像,这个镜像就会生成一个Docker容器;

4)、对容器的启动停止就是对软件的启动停止;

二.Docker安装

1.安装linux虚拟机

1)、VMWare、VirtualBox(安装); VirtualBox下载地址: https://www.virtualbox.org/wiki/Downloads

2)、安装linux系统CentOS7;

3)、双击启动linux虚拟机;使用 root/ 123456登陆

4)、使用客户端连接linux服务器进行命令操作;

5)、设置虚拟机网络;桥接网络=选好网卡==接入网线;

6)、设置好网络以后使用命令重启虚拟机的网络     service network restart         ip addr

2.linux上安装docker

1、检查内核版本,必须是3.10及以上 uname ‐r ,如果不是需要 yum update升级软件包及内核

2、安装docker  ,输入y确认安装

[root@localhost ~]# yum install docker

yum方式安装的docker不是最新版的,通过下面方式安装最新版的docker

[root@localhost ~]# curl -sSL https://get.daocloud.io/docker | sh

3、启动docker 查看docker版本号

[root@localhost ~]# systemctl start docker

4、设置开机启动docker

[root@localhost ~]# systemctl enable docker

5、停止docker

[root@localhost ~]# systemctl stop docker

6、查看docker帮助

[root@localhost ~]# docker --help

帮助命令如下:

 docker --help

三.Docker镜像操作

操作

命令

说明

检索

docker search 关键字

egdocker search mysql

我们经常去docker hub上检索镜像的详细信息,如镜像的TAG

拉取

docker pull 镜像名:tag

:tag是可选的,tag表示标签,多为软件的版本,默认是latest(最新的)

列表

docker images

查看所有本地镜像

删除

docker rmi image-id

删除指定的本地镜像

1.检索镜像

[root@localhost ~]# docker search centos

默认会去 https://hub.docker.com/ 搜索,搜过结果如下

复制代码

[root@localhost ~]# docker search centos
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos                             The official build of CentOS.                   4709                [OK]                
ansible/centos7-ansible            Ansible on Centos7                              118                                     [OK]
jdeathe/centos-ssh                 CentOS-6 6.10 x86_64 / CentOS-7 7.5.1804 x86…   99                                      [OK]
consol/centos-xfce-vnc             Centos container with "headless" VNC session…   63                                      [OK]
imagine10255/centos6-lnmp-php56    centos6-lnmp-php56                              45                                      [OK]
tutum/centos                       Simple CentOS docker image with SSH access      43                                      
centos/mysql-57-centos7            MySQL 5.7 SQL database server                   39                                      
gluster/gluster-centos             Official GlusterFS Image [ CentOS-7 +  Glust…   34                                      [OK]
openshift/base-centos7             A Centos7 derived base image for Source-To-I…   33                                      
centos/python-35-centos7           Platform for building and running Python 3.5…   30                                      
centos/postgresql-96-centos7       PostgreSQL is an advanced Object-Relational …   29                                      
kinogmt/centos-ssh                 CentOS with SSH                                 22                                      [OK]
openshift/jenkins-2-centos7        A Centos7 based Jenkins v2.x image for use w…   15                                      
pivotaldata/centos-gpdb-dev        CentOS image for GPDB development. Tag names…   7                                       
openshift/wildfly-101-centos7      A Centos7 based WildFly v10.1 image for use …   5                                       
openshift/jenkins-1-centos7        DEPRECATED: A Centos7 based Jenkins v1.x ima…   4                                       
darksheer/centos                   Base Centos Image -- Updated hourly             3                                       [OK]
pivotaldata/centos-mingw           Using the mingw toolchain to cross-compile t…   2                                       
pivotaldata/centos                 Base centos, freshened up a little with a Do…   2                                       
blacklabelops/centos               CentOS Base Image! Built and Updates Daily!     1                                       [OK]
pivotaldata/centos-gcc-toolchain   CentOS with a toolchain, but unaffiliated wi…   0                                       
pivotaldata/centos7-test           CentosOS 7 image for GPDB testing               0                                       
pivotaldata/centos7-build          CentosOS 7 image for GPDB compilation           0                                       
smartentry/centos                  centos with smartentry                          0                                       [OK]
jameseckersall/sonarr-centos       Sonarr on CentOS 7                              0                                       [OK]

复制代码

  • NAME:仓库名称
  • DESCRIPTION:镜像描述
  • STARS:用户评价,反应一个镜像的受欢迎程度
  • OFFICIAL:是否官方
  • AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的

2.拉取镜像

拉取镜像默认是从docker hub拉取,这是docker默认的公用仓库,不过缺点是国内下载会比较慢。这里设置从ustc拉取镜像(建议使用)。

在宿主机器编辑文件:vi /etc/docker/daemon.json,在该配置文件中加入(没有该文件的话,请先建一个):

{
 "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

最后,需要重启docker服务 systemctl restart docker.service                        执行拉取镜像命令

[root@localhost ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
256b176beaff: Pull complete 
Digest: sha256:6f6d986d425aeabdc3a02cb61c02abb2e78e57357e92417d6d58332856024faf
Status: Downloaded newer image for centos:latest

3.列表镜像

[root@localhost ~]# docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
docker.io/tomcat          latest              41a54fe1f79d        3 days ago          463 MB
docker.io/centos          latest              5182e96772bf        5 weeks ago         200 MB
  • REPOSITORY:镜像所在的仓库名称
  • TAG:镜像标签
  • lMAGE ID:镜像ID
  • CREATED:镜像的创建日期(不是获取该镜像的日期)
  • SIZE:镜像大小

这些镜像都是存储在Docker宿主机的/var/lib/docker目录下

4.删除镜像

[root@localhost ~]# docker rmi 41a54fe1f79d

四.Docker容器操作

操作

命令

说明

运行

docker run --name container-name -d image-name

eg:docker run –name myredis –d redis

--name:自定义容器名

-d:后台运行

image-name:指定镜像模板

列表

docker ps(查看正在运行中的容器);

docker ps -a:查看历史运行过的容器

docker ps  -l:查看最近运行过的容器

停止

docker stop container-name/container-id

停止当前你运行的容器

启动

docker start container-name/container-id

启动容器

删除

docker rm container-id

删除指定容器

端口映射

-p 6379:6379

eg:docker run -d -p 6379:6379 --name myredis docker.io/redis

-p: 主机端口(映射到)容器内部的端口

容器日志

docker logs container-name/container-id

更多命令

https://docs.docker.com/engine/reference/commandline/docker/

1.启动容器

1)以交互方式启动容器:docker run -it --name 容器名称 镜像 /bin/bash;

  • -i:表示以“交互模式”运行容器
  • -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
  • --name :为创建的容器命名。
  • -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
  • -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
  • -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

创建一个交互式容器并取名为mycentos

[root@localhost docker]# docker run -i -t --name=mycentos centos /bin/bash

2)以守护进程后台方式启动容器:docker run -d --name 容器名称 镜像

[root@localhost ~]# docker search tomcat                                       #搜索tomcat
[root@localhost ~]# docker pull tomcat                                         #拉取tomcat镜像
[root@localhost ~]# docker run -d --name mytomcat -p 8888:8080 tomcat:latest   #启动tomcat容器,并做端口映射
[root@localhost ~]# docker  ps                                                 #查看容器运行列表

2.停止容器

 docker stop 容器名称或者容器ID

[root@localhost ~]# docker stop 62a021b1c0fd 

3.重启容器

 docker start 容器名称或者容器ID

[root@localhost ~]# docker start  62a021b1c0fd 

4.删除容器

删除容器必须是已经停止的容器,删除指定容器:docker rm 容器名称或者容器ID;删除所有容器:docker rm ‘docker ps -a -q’

[root@localhost ~]# docker rm 62a021b1c0fd

五.Docker下部署应用程序

1. 构建镜像方案

  • 方案一:直接通过docker pull拉取别人提交好的tomcat、nginx等应用程序镜像,然后基于这些镜像去创建容器。
  • 方案:通过dockerfile制作自己的应用程序镜像
  • 方案:根据系统镜像创建Docker容器,这个时候Docker就相当于一个虚拟机,然后进入容器部署对应的应用。具体步骤如下:
  1. 启动Centos系统镜像的容器my_container;
  2. 在该容器中部署应用程序,例如:Tomcat、Nginx等;
  3. 将部署完的my_container提交为新的镜像;
  4. 然后根据新的镜像去创建容器;
  5. 这个镜像可以打包,导入到其他的Docker服务器上

2. 构建MySQL镜像

1、 获取基础镜像CentOS

[root@localhost ~]#  docker pull centos

2、 启动容器并且在容器内部安装MySQL

docker run -i -t --name mycentos-mysql centos /bin/bash(通过下面的命令运行centos容器。否则安装后的mysql无法启动。)

[root@localhost ~]#  docker run -it --privileged  --name=mycentos-mysql   centos  /usr/sbin/init

另起一个窗口进入容器:[root@localhost ~]#   docker exec -it mycentos-mysql  /bin/bash

[root@53ee11bff386 /]#   yum install -y wget net-tools

[root@53ee11bff386 /]#   wget   http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

[root@53ee11bff386 /]#   rpm -ivh mysql-community-release-el7-5.noarch.rpm

[root@53ee11bff386 /]#   yum install mysql-community-server

3、 启动mysql,并设置密码

[root@53ee11bff386 /]#   systemctl start mysqld

[root@53ee11bff386 /]#   mysql -uroot -p  回车

mysql>    SET PASSWORD = PASSWORD('123456');

mysql>    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

mysql>    FLUSH PRIVILEGES;

mysql>   exit;

4、 提交为新镜像

[root@localhost ~]# docker commit mycentos-mysql mysql5.6
[root@localhost ~]# docker images

5、 启动mysql容器

[root@localhost ~]# docker run -d -e "container=docker" --privileged=true --name mysql5.6 -p 3306:3306 mysql5.6 

6、 进入容器启动MySQL服务

[root@localhost ~]#  docker exec -it mysql5.6 /bin/bash
[root@6dda80c75bfc /]#  systemctl start mysql

7、 Navicat连接

8、 上传镜像到Docker hub

  • 注册Docker hub账号,在Docker Hub注册后创建private/public的Repository。
  • 登录docker login   [root@localhost ~]#  docker login
  • tag修改镜像名称             [root@localhost ~]#      docker tag mysql5.6 frank409167848/centos7-mysql5.6
  • 推送docker push   [root@localhost ~]#  docker push frank409167848/centos7-mysql5.6
  • Docker hub 查看
  • 下载

六.报错问题

1.启动docker报错

[root@localhost ~]# systemctl start docker
Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.

查看docker状态

复制代码

[root@localhost ~]# systemctl status docker.service
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Sun 2018-09-16 04:13:30 EDT; 8min ago
     Docs: http://docs.docker.com
  Process: 2124 ExecStart=/usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=dock
er-runc --exec-opt native.cgroupdriver=systemd --userland-proxy-path=/usr/libexec/docker/docker-proxy-current --init-path=/usr/libexec/dock
er/docker-init-current --seccomp-profile=/etc/docker/seccomp.json $OPTIONS $DOCKER_STORAGE_OPTIONS $DOCKER_NETWORK_OPTIONS $ADD_REGISTRY $B
LOCK_REGISTRY $INSECURE_REGISTRY $REGISTRIES (code=exited, status=1/FAILURE)
 Main PID: 2124 (code=exited, status=1/FAILURE)

Sep 16 04:13:27 localhost.localdomain systemd[1]: Starting Docker Application Container Engine...
Sep 16 04:13:29 localhost.localdomain dockerd-current[2124]: time="2018-09-16T04:13:29.348086797-04:00" level=warning msg="could no...ound"
Sep 16 04:13:29 localhost.localdomain dockerd-current[2124]: time="2018-09-16T04:13:29.365854628-04:00" level=info msg="libcontaine...2128"
Sep 16 04:13:30 localhost.localdomain dockerd-current[2124]: time="2018-09-16T04:13:30.457340010-04:00" level=warning msg="overlay2: the...
Sep 16 04:13:30 localhost.localdomain dockerd-current[2124]: Error starting daemon: SELinux is not supported with the overlay2 grap...alse)
Sep 16 04:13:30 localhost.localdomain systemd[1]: docker.service: main process exited, code=exited, status=1/FAILURE
Sep 16 04:13:30 localhost.localdomain systemd[1]: Failed to start Docker Application Container Engine.
Sep 16 04:13:30 localhost.localdomain systemd[1]: Unit docker.service entered failed state.
Sep 16 04:13:30 localhost.localdomain systemd[1]: docker.service failed.
Hint: Some lines were ellipsized, use -l to show in full.

复制代码

Solutions:根据高亮的错误日志得知,此linux的内核中的SELinux不支持 overlay2 graph driver ,解决方法有两个,要么启动一个新内核,要么就在docker里禁用selinux,--selinux-enabled=false

重新编辑docker配置文件:# vi /etc/sysconfig/docker

如上改为--selinux-enabled=false后保存,重启docker,搞定!

2.启动mysql报错

[root@dfb1cc594f9b /]# systemctl start mysql
Failed to get D-Bus connection: Operation not permitted

解决办法

生成容器: # docker run -d -e "container=docker" --privileged=true --name mysql5.6 -p 3306:3306 mysql5.6 

进入容器: # docker exec -it mysql /bin/bash

这样可以使用systemctl启动服务了。

猜你喜欢

转载自blog.csdn.net/bd_jc/article/details/85263592