温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

centos7中如何安装使用Docker

发布时间:2021-12-13 15:01:13 来源:亿速云 阅读:162 作者:小新 栏目:云计算

这篇文章给大家分享的是有关centos7中如何安装使用Docker的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

安装(以centos7为例)

安装
yum install -y docker
启动
service docker start
验证安装
docker version

由于网络问题,可能拉取镜像的时候很慢,可以通过设置代理等操作加快,或者自建镜像仓库等
贴一下我之前有用到仓库中心:
Docker仓库
https://hub.docker.com/explore/
国内:需要登录
https://cr.console.aliyun.com/#/imageList
https://c.163.com/hub#/m/home/

指令

1.docker pull [options] name[:TAG] 拉取镜像:不加标签默认获取latest

2.docker run [options] image[:TAG][COMMAND]
运行镜像:指令的选项较多,介绍自己平常使用较多的
-d:后台运行
-p:指定端口端口映射
-P:启动全部端口映射,需要通过docker ps查看端口映射情况
-v:文件映射
-e:变量赋值
-m:限制容器的内存上限
--name:容器命名
--restart=always:容器重启

3.docker ps:查看运行的容器
-a:查看全部,包括已经停止

4.docker exec -it containid bash:进入容器内部

5.docker stats containid:查看容器的运行情况

6.docker build -t image:tag -f buildfile .:构建镜像
构建镜像:有时候我们需要为存在的镜像加入新的插件来重新构建特有的镜像,通过编写Dockerfile来构建

贴一个自己构建php的镜像(基于基础php加入redis,mq等插件)
docker build -t php:5.6-fpm-ext -f ./docker/php/phpDockerfile .

phpDockerfile:

FROM hub.c.163.com/library/php:5.6-fpm
RUN apt-get update && apt-get install -y  libfreetype6-dev  libjpeg62-turbo-dev  libmcrypt-dev  libpng12-dev 
RUN docker-php-ext-install -j$(nproc) iconv mcrypt 
RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ 
RUN docker-php-ext-install -j$(nproc) gd
RUN docker-php-ext-install mysqli
RUN docker-php-ext-install pdo_mysql
RUN docker-php-ext-install zip
RUN curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/2.2.7.tar.gz \
    && tar xfz /tmp/redis.tar.gz \
    && rm -r /tmp/redis.tar.gz \
    && mkdir -p /usr/src/php/ext \
    && mv phpredis-2.2.7 /usr/src/php/ext/redis \
    && docker-php-ext-install redis
COPY ./docker/php/rabbitmq-c-0.4.1.tar.gz  /tmp/rabbitmq-c-0.4.1.tar.gz
RUN tar zxvf /tmp/rabbitmq-c-0.4.1.tar.gz \
    && curl -L -o /tmp/amqp-1.2.0.tgz http://pecl.php.net/get/amqp-1.2.0.tgz \
    && tar zxvf /tmp/amqp-1.2.0.tgz \
    && rm -r /tmp/rabbitmq-c-0.4.1.tar.gz \
    && rm -r /tmp/amqp-1.2.0.tgz \
    && mkdir -p /usr/src/php/ext \
    && mv rabbitmq-c-0.4.1 /usr/src/php/ext/rabbitmq \
    && mv amqp-1.2.0 /usr/src/php/ext/amqp \
    && cd /usr/src/php/ext/rabbitmq \
    && ./configure --prefix=/usr/local/rabbitmq-c-0.4.1 \
    && make && make install \
    && cd /usr/src/php/ext/amqp \
    && docker-php-ext-configure amqp --with-php-config=/usr/local/bin/php-config --with-amqp --with-librabbitmq-dir=/usr/local/rabbitmq-c-0.4.1/ \
    && docker-php-ext-install amqp

问题事项

防火墙问题: 在一个容器内容调用宁外一个容器的url出现curl:no route to host问题。 经排查:我的centos7防火墙使用了firewalld,firewall的底层是使用iptables进行数据过滤,建立在iptables之上,这可能会与 Docker 产生冲突。 解决:在firewalld中加入容器需要端口 firewall-cmd --zone=public --add-port=80/tcp --permanent:加入80端口 firewall-cmd --reload:重启防火墙

权限问题: 有时候会出现无法写文件等问题。 解决:(最粗暴的方案) 给文件加入chmod 777 -R * docker加入docker run --privileged=true

JAVA内存问题: 使用springboot的时候出现内存吃紧,由于没设置jvm的内存大小默认直接使用机器内存的1/4作为上限,导致内存吃紧,通过加入docker run -m 只是限制容器的内存上限,到达上限之后容器会被停掉,但是不会对jvm的内存有影响,所以要解决应该在启动容器的时候加入 java -Xmx256m -Xms64m -Xmn32m。当然也可以通过其他方案设置jvm,看个人喜好。

代码和镜像打包问题: docker使用的时候,代码是否需要和镜像一起构建变成新的镜像,这种方案可能很美好,构建完,哪里有需要拉取,运行就好。但是在实际运用过程,业务的代码是要经常变更的,所以我们选取的方案是通过-v映射代码,镜像以运行环境为准,不做代码打入,这样变更代码,只需替换文件,无须重构建镜像。

数据库问题: 在我们的开发和测试docker也做了mysql数据库,不过看了网络的一些介绍,说不建议把数据库使用docker,可能会出现问题。由于我们生产环境使用了阿里云的数据库,所以暂时没有发现相关的坑。

应用问题: docker的容器创建,关闭等通过什么方式?docker compose,还是shell? 考虑到要给其他客户安装加上网络问题,我直接使用shell脚本编写,没有使用compose。最后贴一些我的非专业运维的shell脚本。

相关扩展

1.docker的网络介绍,docker有3种网络类型:

Bridge(默认)  Host  None
Bridge:做一个网桥端口映射,容器有独立ip,端口,
Host:容器内网络和主机网络一样

2.docker compose 管理多个容器,通过编写docker-compose.yaml来定义需要容器

安装:curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
授权:chmod +x /usr/local/bin/docker-compose
查看:docker-compose --version

贴一个docker-compose.yaml

version: '2'
services:
  java:
    build: .
    ports:
      - "8080:8080"
    volumes:
      - "./tmp:/tmp"
      - "./logs:/opt/logs"
    depends_on:
      - mysql

    entrypoint: [ "sh", "-c", "./wait-for-it.sh -h mysql -p 3306 -s -- java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -Dspring.datasource.url=jdbc:mysql://mysql:3306/mq -jar app.jar" ]

  mysql:
    image: daocloud.io/mysql:5.6
    environment:
      MYSQL_DATABASE: mq
      MYSQL_USER: mq
      MYSQL_PASSWORD: 123456
      MYSQL_ROOT_PASSWORD: 123456

3.docker可视化UI控制台 通过可视化的页面来控制容器启停,运行状态等。比较流行的有dockerui,Shipyard等,看个人需要。

结尾

最后启动容器的shell脚本:

echo "start docker"
service docker start

function start_image {
  if [ $(docker ps  -a | grep -c $1) -ge 1 ]
  then
    echo "container has exits $1 start"
    docker start $1
  else
    echo "$1 run image create container"
    docker run -d  -v /etc/localtime:/etc/localtime:ro --privileged=true --name $1 $2
  fi
}


if [ $(docker images hub.c.163.com/library/mysql:5.6 | grep -c hub.c.163.com/library/mysql) -ge 1 ]
then 
  start_image cloud-mysql-dev \
    "-p 8000:3306 
    -v ${PWD}/data/mysql:/var/lib/mysql 
    -v ${PWD}/docker/mysql:/etc/mysql/conf.d  
    -e MYSQL_ROOT_PASSWORD=123cloud 
    hub.c.163.com/library/mysql:5.6" 
fi


if [ $(docker images hub.c.163.com/library/redis:3 | grep -c hub.c.163.com/library/redis) -ge 1 ]
then 
  start_image cloud-redis-dev \
    "-p 8001:6379 
    -v ${PWD}/data/redis:/data 
    -v ${PWD}/docker/redis/redis.conf:/usr/local/etc/redis/redis.conf 
    hub.c.163.com/library/redis:3
    redis-server /usr/local/etc/redis/redis.conf  
    --appendonly yes "
fi

感谢各位的阅读!关于“centos7中如何安装使用Docker”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI