docker安装和使用

docker安装:
官方文档:
https://docs.docker.com/engine/install/ubuntu/

操作步骤:
$ sudo apt-get update

$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –

$ sudo apt-key fingerprint 0EBFCD88

$ sudo add-apt-repository \
“deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable”
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io

docker –version
显示docker版本信息则安装成功

使用:

显示镜像列表: docker images

构建镜像:docker build -t nginx:self .

删除镜像:docker rmi nginx:self (REPOSITORY:TAG)

运行容器:docker start nginx

停止容器:docker stop nginx

重启容器:docker restart mynginx

删除容器:docker rm nginx

进入容器:docker exec -it mynginx bash

容器详情:docker inspect nginx

查看容器IP:docker exec redis hostname -I

停止所有容器:docker stop $(sudo docker ps -aq)

停止名称以mywork_开头的的容器:sudo docker rm $(sudo docker ps -qa –filter “name=mywork_”)

删除容器列表中包含golang的容器:docker rm $(docker ps -a | grep golang | awk ‘{print $1}’)

删除所有容器:docker rm $(sudo docker ps -aq)

Nginx容器:

运行:

docker run -p 80:80 –name mynginx -v /usr/local/workspace/nginx/vhosts:/etc/nginx/conf.d -v /usr/local/workspace/nginx/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/workspace/nginx/www:/usr/share/nginx/html -d nginx

容器的nginx.conf配置文件在 容器的/etc/nginx/ 下

PHP-FPM容器:

容器的php.ini配置文件在 容器的/usr/local/etc/php 下

MYSQL容器:

默认配置文件目录在 /etc/mysql/my.cnf,其引用的真实文件路径为/etc/alternatives/my.cnf

Redis容器:

默认容器里没有配置文件,需要用户自己映射,可以在Dockerfile 里先将本地文件copy进去,再进行文件映射,可到达主机和容器配置文件的同步,

数据目录 默认是在/data下

连接redis时如果提示 Connection refused ,请确认redis.conf里的bind项是不是设置了正确的访问范围

所有配置均已经配置好docker-compose文件,链接为 https://github.com/leohe666/docker

下载后直接运行修改.env配置文件里的具体项,然后docker-compose up 后台运行即可安装,如果需要后台运行则运行docker-compose up -d

 

 

docker run -p 9000:9000 -d –name myphp-fpm -d php

docker run –name test-php -p 9000:9000 -v /var/www/html/:/wwwroot -d php

docker run –name runoob-php-nginx -p 8083:80 -d \
-v /var/nginx/www:/usr/share/nginx/html:ro \
-v /var/nginx/conf/conf.d:/etc/nginx/conf.d:ro \
–link myphp-fpm:php \
nginx

sudo docker exec -it ef716181053e /bin/bash

docker run –name php-fpm -v /var/www/html:/usr/share/nginx/html -d php

docker run –name myphp-fpm -v /var/www/html:/usr/share/nginx/html -d php:last

docker run -it –rm php bash

usr/share/nginx/html

docker run -p 3306:3306 –name mysql \
-v /home/docker/mysql/conf:/etc/mysql \
-v /home/docker/mysql/logs:/var/log/mysql \
-v /home/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7 \
–character-set-server=utf8mb4 \
–skip-name-resolve

php-fpm 安装pdo扩展

在 php-fpm 容器里面的 /usr/local/bin 执行
““
docker-php-ext-install pdo pdo_mysql
““

固定ip:
docker run -itd –name networkTest1 –net mynetwork –ip 172.18.0.2 centos:latest /bin/bash
–ip 172.18.0.2
固定DNS:
–dns=114.114.114.114

–net 固定网络使用 mynetwork, 多个使用相同net的窗口可以相互通讯(可以使用 docker network create -d bridget mynetwork 创建网络后使用,需要建立新的网络才可以,自带的bridge无法ping通)

-h HOSTNAME 或者 –hostname=HOSTNAME: 设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts。
–dns=IP_ADDRESS: 添加 DNS 服务器到容器的 /etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名。
–dns-search=DOMAIN: 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的主机时,DNS 不仅搜索 host,还会搜索 host.example.com。
docker run -it –rm mynginx cat etc/resolv.conf

docker-compose 安装

sudo curl -L “https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose

如果要用代理:
sudo curl -x http://192.168.0.101:10809 -L “https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose –version
出现版本号则安装正常

docker run -p 6699:6379 –name myredis -v /home/docker/redis/redis.conf/redis.conf:/etc/redis/redis.conf -v /home/docker/redis/data:/data -d redis redis-server /etc/redis/redis.conf –appendonly yes

curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/5.2.2.tar.gz

tar xfz /tmp/redis.tar.gz
rm -r /tmp/redis.tar.gz
mkdir -p /usr/src/php/ext
mv phpredis-5.2.2 /usr/src/php/ext/redis
cd /usr/local/bin
docker-php-ext-install redis

 

PHP gd库的freetype安装

apt-get install -y libwebp-dev libjpeg-dev libpng-dev libfreetype6-dev
docker-php-ext-configure gd –with-webp-dir=/usr/include/webp –with-jpeg-dir=/usr/include –with-png-dir=/usr/include –with-freetype-dir=/usr/include/freetype2
docker-php-ext-install gd
Curl扩展安装(如需要)
apt-get install libcurl4-openssl-dev
docker-php-ext-install curl

进入容器后无法使用telnet ipconfig待工作可以用以下命令进行安装:

apt-get install net-tools
apt-get install iputils-ping
apt-get install telnet

 

普通用户使用docker docker-compose
#创建docker组
vagrant@ubuntu18:~$ sudo groupadd docker
groupadd: group ‘docker‘ already exists
#将当前用户加入docker组
vagrant@ubuntu18:~$ sudo gpasswd -a ${USER} docker
Adding user weiyj to group docker
#重启docker服务
vagrant@ubuntu18:~$ sudo service docker restart
#刷新docker组成员
vagrant@ubuntu18:~$ newgrp docker
#再试试命令^_^
vagrant@ubuntu18:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 加速设置
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-‘EOF’
{
“registry-mirrors”: [“https://rzzb04yl.mirror.aliyuncs.com”]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
非root用户出现 /var/run/docker.sock: connect: permission denied
chmod 666 /var/run/docker.sock